Управление памятью и асинхронные операции: когда объект становится нулевым? - PullRequest
2 голосов
/ 24 марта 2010

У меня есть вид, который будет отображать загруженные изображения и текст.Я хотел бы обрабатывать всю загрузку асинхронно, используя ASIHTTPRequest, но я не уверен, что делать с уведомлением представления о завершении загрузки ...

Если я передаю свой контроллер представления в качестве делегатаASIHTTPRequest, и затем мое представление будет уничтожено (пользователь уходит), оно изменится изящно, когда попытается отправить сообщение моему контроллеру представления, потому что делегат теперь равен nil?

т.е. если я сделаю это:

UIViewController *myvc = [[UIViewController alloc] init];
request.delegate = myvc;
[myvc release];

Сделайте сейчас myvc и request.delegate == указатель на ноль?

В этом проблема самообучения ... Я немного размышляю над некоторыми основными понятиями.

Другие идеи о том, как справиться с этим, приветствуются.

1 Ответ

3 голосов
/ 24 марта 2010

обновление: Глядя на исходный код для ASIHTTPRequest , он не сохраняет свой делегат, поэтому ваш код будет иметь чтобы убедиться, что делегат не был освобожден, или установите свойство делегата запроса на nil перед освобождением контроллера.

Если вы собираетесь запустить несколько асинхронных HTTP-запросов, неплохо было бы создать класс HTTPRequestManager, который будет выполнять функции делегата для всех ваших HTTP-запросов. Этот класс HTTPRequestManager будет оставаться в памяти на протяжении всего времени жизни вашего приложения, и он может позаботиться о постепенном отказе, если / когда будут выпущены ваши контроллеры представления.

Я хотел бы добавить разъяснение об управлении памятью в Какао. Важно помнить, что для освобожденного объекта не автоматически установлено значение nil. Отправка сообщения на nil совершенно законна (и просто ничего не делает), но отправка сообщения на удаленный объект является неопределенным поведением. Сохранение указателя на удаленный объект вызывает проблемы, и такие живые / мертвые указатели называются зомби.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...