2009-10-28 3 views
0

내 클래스가 비동기 웹 호출을 하나 만들고 사용자가지도를 이동하여 다른 NSURLConnection을 제대로 취소하지 못하는 상황에 부딪 혔습니다. 여러 비동기 호출을 관리하기위한 몇 가지 솔루션을 보았지만 두 번째 요청이 만들어지면 더 이상 첫 번째 요청을 신경 쓰지 않기 때문에이 작업을 수행하고 싶지 않습니다. 나는 거기에 cancel 메서드가 있지만 연결이 nil 경우에만 호출 할 시도했지만 해당 개체에 대한 릴리스 불구하고 연결이 nil 될 것 결코 것 같습니다. 누구나 비동기 NSURLConnect의 적절한 취소 코드 샘플을 가지고 있습니까?iphone 비동기 NSURLConnection 취소

답변

3

나는 Objective C 메시지가 전달되거나 유지/릴리스되는 것을 이해하지 못한다고 생각합니다. retain 또는 release를 객체에 보내면 해당 객체에 대해 보유하고있는 포인터가 nil이되지 않습니다. (객체가 더 이상 유효하지 않을 수도 있음). 즉 :

id a = b; 
[a release]; 

//since release never changes the value of a 
assert(a == b); 

좋아, 어떻게 든 릴리스 코드는 개체 포인터의 값을 변경 한 경우에는 다음 아무것도하지 않는 것 그것에 또 다른 메시지를 전송, 전무에 대해 그것을라고 말했다 데. 메시지가 없으면 자동으로 삭제됩니다. 기억하고있는 것은 객체 자체가 아니라 객체에 대한 포인터입니다.

그렇다면 NSURLConnection을 취소하려는 경우. 해제하기 전에 취소를 보내야합니다 (일반적으로 해제 한 후에는 메시지를 객체에 보내지 않는 것이 일반적입니다).

정말 Apple의 메모리 관리 documentation을 읽어 보시기 바랍니다.

관련 문제