ОБНОВЛЕНИЕ: Инструменты показывают много утечек, когда я делаю это. Действуйте с осторожностью! Я сохраню это здесь на случай, если я действительно что-то предприму, и кто-то еще может выяснить, как преодолеть препятствие утечки.
Вот извращенная идея, которую я пытаюсь повторить, набирая это:
Установите операцию как объект для NSInvocationOperation '* initWithTarget: селектор: объект: метод. Предполагая, что у вас уже есть NSOperationQueue (назовем его queue ):
NSInvocationOperation *operation = [NSInvocationOperation alloc];
operation = [operation initWithTarget:self selector:@selector(myOperation:) object:operation];
[queue addOperation:operation];
[operation release];
Обратите внимание, что мы должны разбить alloc на собственный вызов. В противном случае мы не можем установить объект на операцию !
Затем, в вашем методе операции, откиньте объект назад и посыпьте проверки для isCancelled по желанию. Например:
- (void)myOperation:(id)object {
NSInvocationOperation *operation = (NSInvocationOperation *)object;
if ([operation isCancelled]) return;
...
}
Убедитесь, что ваш селектор оканчивается двоеточием в вызове initWithTarget: ... , так как вы теперь будете передавать объект.
Пока все хорошо. Теперь, если я смогу заставить cancelAllOperations , я буду знать, действительно ли это работает. :)