Как обрабатывать NSZombies в асинхронном NSURLConnection?
-
13-09-2019 - |
Вопрос
В настоящее время я асинхронно использую NSURLConnection
с несколькими UIViews
(каждое представление обрабатывает NSURLConnection
в качестве делегата).У меня проблема в том, что пользователь слишком быстро переключает представления, и делегат становится NSZombie
приложение выходит из строя - то есть у NSURLConnection больше нет живого делегата.Итак, первый вопрос: есть ли способ обойти это?
Второй вопрос прост: как мне справиться с NSZombie?Простой if(myObject != nil)..
не работает вообще.
Решение
Вам нужно отмена тот NSURLConnection
прежде чем вы избавитесь от этого делегата.Просто сохраните ссылку на NSURLConnection в своем UIView
который действует как делегат и вызывает [urlConnection cancel]
.
После того как вы отпустите сообщение, вам необходимо установить указатель на него в ноль, если вы продолжите использовать этот указатель.В качестве примера:
id myObject = [[SomeObject alloc] init];
/* Some code */
[myObject release];
myObject = nil;
/* Some more code */
if (myObject != nil) {
[myObject doSomething];
}
Однако обратите внимание, что допустимо отправить сообщение на nil
поэтому вам не нужно охранять отправку сообщения.Это просто не будет иметь никакого эффекта, если myObject == nil
.