2009-12-04 4 views
0

현재 여러 개의 UIViews (모든보기는 대리자로 NSURLConnection을 처리 함)과 함께 비동기 적으로 NSURLConnection을 사용하고 있습니다. 내가 가진 문제는 사용자가보기를 너무 빠르게 전환하고 대리자가 NSZombie으로되어 응용 프로그램이 충돌 할 때입니다. 즉, NSURLConnection에 더 이상 살아있는 대리자가 없습니다. 첫 번째 질문은 이것을 우회 할 수있는 방법이있을 때입니다.비동기 NSURLConnection에서 NSZombies를 처리하는 방법은 무엇입니까?

두 번째 질문은 간단합니다. NSZombie를 어떻게 처리합니까? 단순한 if(myObject != nil)..이 전혀 작동하지 않습니다.

답변

7

위임자를 처리하기 전에 cancelNSURLConnection해야합니다. 위임자 역할을하는 UIView의 NSURLConnection에 대한 참조를 유지하고 [urlConnection cancel]으로 전화하십시오.

메시지를 놓은 후에도 포인터를 계속 사용하려면 메시지에 포인터를 설정해야합니다. 예를 들어 :

id myObject = [[SomeObject alloc] init]; 

/* Some code */ 

[myObject release]; 
myObject = nil; 

/* Some more code */ 

if (myObject != nil) { 
    [myObject doSomething]; 
} 

공지 사항, 그러나 nil에 메시지를 보내 유효하다고 그래서 당신은 메시지가 전송 안전하게 보호 할 필요가 없습니다. myObject == nil 일 경우 아무런 효과가 없습니다.

+0

감사합니다. [취소] 내부에서보기 WillDisappear가 올바른 해결책이었습니다. – cocoapriest

+0

트래픽을 이유로 연결을 취소하는 것이 좋은 방법이지만 NSURLConnection의 start 메서드는 연결의 대리자를 유지하므로 A가 아니면 대리자를 어딘가에 다시 사용하거나 B를 사용하지 않는 한 먼저 대리자가 좀비가 될 수 없습니다 당신이 [연결 시작]을 부르기 전에 이미 좀비입니다. – dgatwood

관련 문제