NSOperation在主線程中有一個委託,它調用NSOperation運行時發生的一些事件。從主線程訪問NSOperation對象的安全方法?
Delegate然後訪問NSOperation的屬性以獲取詳細信息。
我很關心這個邊緣情況:如果NSOperation在隊列調用委託之後被納秒釋放,該怎麼辦?我擔心突然間所有的對象都會因NSOperation的-dealloc釋放而消失,然後我在主線程上得到一個EXC_BAD_ACCESS。
你如何預防這種情況?我想過做的NSOperation內像這樣它在後臺運行:
[(NSObject*)self.delegate performSelectorOnMainThread:@selector(operationUpdatedStatus:) withObject:[[self retain] autorelease] waitUntilDone:NO];
但我認爲這是無稽之談,因爲自動釋放池也被立即倒掉,因爲它是本地的NSOperation。
所以可以肯定的是,我必須像這樣在Main Thread的委託方法中保留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對象不會被殺死,直到主線程的運行循環結束?