NSOperation имеет делегата в главном потоке, который вызывается для некоторых событий, которые происходят во время выполнения NSOperation.
Затем делегат получает доступ к свойствам NSOperation для получения подробной информации.
Я обеспокоен этим крайним случаем: что если NSOperation освобождается из очереди через наносекунду после вызова делегата?Я боюсь, что внезапно все объекты могут исчезнуть из-за выпуска -dealloc в NSOperation, а затем я получаю EXC_BAD_ACCESS в главном потоке.
Как вы можете предотвратить это?Я думал о том, чтобы сделать что-то подобное в NSOperation, которое работает в фоновом режиме:
[(NSObject*)self.delegate performSelectorOnMainThread:@selector(operationUpdatedStatus:) withObject:[[self retain] autorelease] waitUntilDone:NO];
Но я думаю, что это чепуха, потому что пул авто-релизов также мгновенно сливается, так как он локальный для NSOperation.
Таким образом, чтобы быть уверенным, я должен сохранить NSOperation в методе делегата в Основном потоке, как это?
- (void)operationUpdatedStatus:(NSOperation*)op {
[op retain]; // now we're safe to use it
NSMutableArray *errorMessages = op.errors;
for (NSString *errorMessage in errorMessages) {
// lots of code
}
[op release];
}
Или гарантируется, что объект NSOperation не будет уничтожен, пока цикл выполненияОсновная нить заканчивается?