Как обращаться с NSZombies в асинхронном NSURLConnection? - PullRequest
0 голосов
/ 04 декабря 2009

В настоящее время я асинхронно использую NSURLConnection с несколькими UIViews (каждое представление обрабатывает NSURLConnection в качестве делегата). У меня проблема, когда пользователь переключает представления слишком быстро, и делегат становится NSZombie, приложение падает, то есть NSURLConnection больше не имеет живого делегата. Итак, первый вопрос: есть ли способ обойти это?

Второй вопрос прост - как мне справиться с NSZombie? Простой if(myObject != nil).. вообще не работает.

1 Ответ

7 голосов
/ 04 декабря 2009

Вам необходимо отменить NSURLConnection, прежде чем вы удалите его делегата. Просто сохраните ссылку на NSURLConnection в вашем UIView, который действует как делегат, и вызовите [urlConnection cancel].

После того, как вы отпустите сообщение, вам нужно установить на него указатель nil, если вы продолжите использовать этот указатель. Как пример:

id myObject = [[SomeObject alloc] init];

/* Some code */

[myObject release];
myObject = nil;

/* Some more code */

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

Обратите внимание, что отправка сообщения на nil действительна, поэтому вам не нужно защищать отправку сообщения. Это просто не будет иметь никакого эффекта, если myObject == nil.

...