Ручное время жизни объекта с ARC
Изучите следующий код и предположите, что он был скомпилирован в ARC:
- (void)foo { NSOperationQueue *oq = [[NSOperationQueue alloc] init]; [oq addOperationWithBlock:^{ // Pretend that we have a long-running operation here. }]; }
Хотя очередь операций объявляется как локальная переменная, ее время жизни остается за рамками метода, пока в нем выполняются операции.
Как это достигается?
UPDATE:
Я ценю хорошо продуманные комментарии Роба Мейоффа, но думаю, что не правильно задал свой вопрос. Я не задаю конкретный вопрос о NSOperationQueue, а скорее задаю общий вопрос о времени жизни объекта в ARC. В частности, мой вопрос заключается в следующем:
How, under ARC, can an object participate in the management of its own lifetime?
Я был программистом в течение очень долгого времени, и я хорошо осведомлен о подводных камнях такой вещи. Я не собираюсь читать лекции о том, хорошая это или плохая идея. Я думаю, что в целом это плохо. Скорее мой вопрос академический:Whether it's a good or bad idea or not, how would one do this in ARC and what is the specific syntax to do so?