2011-10-13 3 views
0

나는 JSONNetworkUtility라는 서비스 개체를 가지고 있고, 나는 나의 바르 등의 모델뿐만 아니라 동일한 이름을 가진 합성 특성에 저장, 비 원자 및 유지 :왜 내 속성 getter NSZombie 오류가 발생합니까?

myNetworkUtility = [[JSONNetworkUtility alloc] initNetworkConnectionWithURL:urlString withQueryString:nil delegate:self]; 

대리인은이 콜백, 하나를 포함 networkUtility:didFailWithError:이고 다른 하나는 networkUtility:didFinishWithData:입니다.

- (void)networkUtility:(JSONNetworkUtility *)networkUtility didFinishWithData:(NSArray *)jsonArray 
{ 
    NSLog(@"myNetworkUtility = %@", myNetworkUtility); 
    // returns <JSONNetworkUtility: 0x3944450> 

    NSLog(@"networkUtility = %@", networkUtility); 
    // also returns <JSONNetworkUtility: 0x3944450> 

    NSLog(@"self.myNetworkUtility = %@", self.myNetworkUtility); 
    // fails and throws an NSZombie error! 
} 

내가 그 줄에 얻을 오류는 다음과 같습니다 : 이상한 것은이 속성은 몇 가지 이상한 오류의 원인이되는 것입니다

을 ***은 - [MyModel myNetworkUtility] : 메시지가 전송 할당 해제 된 인스턴스로 0x148190

나는 완전히 엉망이다! 게터에서 왜 실패하는지에 대한 단서가 있습니까? 왜 완전히 다른 대상을 돌려주는 것일까 요?

내가 getter를 사용하는 이유는 내가 self.myNetworkUtility = nil을 사용하고 싶었 기 때문에 새 객체로 속성의 맨 위에 쓸 수 있지만이 추적으로 다시 잘라 버렸고 여전히 문제가 발생했습니다 ...

고마워요!

+0

동일한 메서드에서 위의 개체에 대한 대리자 호출을 게시하는 것에 대해 언급하지는 못했지만 위의 행을 게시하지 않았습니다. 이것은 호출이 완료되었다는 메시지를 보내고 MyModel을 해제합니다 ... 따라서 getter를 참조하는 추적이 실패합니다. – jowie

답변

6

문제는 MyModel이 할당 취소 된 것입니다. ivar에 접근 할 때, 객체는 여전히 그 메모리 주소 주소에 있고, 메모리는 아직 손상되지 않습니다. 그러나 할당 취소 된 'self'에 메시지를 보낼 때 런타임은 객체가 할당 해제되었다는 사실을 포착합니다.

+0

그러면 오류가 다른 객체를 가리키는 이유가 설명됩니다. myNetworkUtility가 아닌 MyModel입니다. 감사 ... 고마워! :) – jowie