Если ваш объект выполняет свою асинхронную задачу в фоновом потоке, или является целью таймера, или использует GCD и на него ссылаются в пределах объема отправляемого блока (^ {}
kerjigger), тогда он будет сохранен для вас за время жизни этой фоновой операции.
Итак, нормальный вариант использования:
AsyncObject *async = [[AsyncObject alloc] initWithDelegate:self];
[async goDoSomething];
[async release];
Теперь можно работать в фоновом режиме с объектом, который не сохраняется (например, используя __block
-объектную ссылку на объект с GCD или отсоединяя ваш рабочий поток с помощью pthreads вместо NSThread
/ NSOperation
), но нет типичных случаев использования, которые я мог бы придумать, где бы это ни произошло. В таком случае вы должны убедиться, что -goDoSomething
внутренне сохраняет и освобождает self
на время операции.
(Если кто-то может подумать о случае, когда объект не был сохранен для вас, пожалуйста, напишите в комментариях, и я обновлю свой ответ.)