Когда я должен выпустить объект, используемый асинхронно? - PullRequest
2 голосов
/ 11 августа 2011

У меня есть объект, который инкапсулирует асинхронный запрос NSURL.Когда я должен выпустить его?

StrangersRequest *request = [[StrangersRequest alloc] init];
request.strangersListener = strangersListener;
[request send];

Анализ в XCode говорит, что я должен выпустить его немедленно - но это неправильно, потому что он должен обрабатывать обратный вызов URLRequest.

Каков подходящий шаблон для освобождения объектов, которые обрабатывают асинхронные события?

Я предполагаю, что я должен освободить, когда запрос завершится (connectionDidFinishLoading).Если да, то как я могу остановить Анализ от жалоб на это?

Ответы [ 3 ]

4 голосов
/ 11 августа 2011

Вы должны сохранить ссылку на него в классе, который его использует, а затем немедленно удалить его Затем ваш класс может удалить ссылку, когда это будет сделано. Примерно так:

StrangersRequest *request = [[StrangersRequest alloc] init];
request.strangersListener = strangersListener;
[request send];
self.strangersRequest = request;
[request release];
2 голосов
/ 11 августа 2011

Вы можете следовать модели NSThread и заставить объект сохранять себя, пока его асинхронная задача не будет выполнена.

0 голосов
/ 11 августа 2011

Одним из решений является сохранение его в ivar вместо локальной переменной.

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