Предположим, я занимаюсь разработкой для iPhone и у меня есть подкласс UIViewController
. И предположим, что у этого контроллера представления есть NSOperationQueue
, который создан в viewDidLoad
и выпущен в dealloc
.
Теперь предположим, что в какой-то момент, когда этот контроллер представления активен, он добавляет NSInvocationOperation
к NSOperationQueue
, и очередь операций начинает выполнять его в фоновом режиме. Пока он выполняется, контроллер представления закрывается.
Что происходит с работающим NSInvocationOperation
? Может ли он продолжать работать и не допустить освобождения контроллера представления?
Пример кода в контроллере вида:
NSInvocationOperation *operationDoSomething = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(synchronousDoSomething:) object:nil];
[_operationQueue addOperation:operationDoSomething];
[operationDoSomething release];
а затем это еще одна функция в моем контроллере вида:
- (void)synchronousDoSoemthing
{
[NSThread sleepForTimeInterval:1000.0];
[self finished];
}
Таким образом, в приведенном выше примере к моменту вызова [self finished]
контроллер представления отключен от контроллера навигации.