0
在非ARC應用程序,我具有由委託入隊和看起來像一個的NSOperation亞類:dispatch_async和保留(非ARC)
// note that the delegate and element properties are retained
-(id)initWithDelegate:(id<SomeDelegate>)inDelegate element:(SomeElement *)inElement
{
if (self = [super init])
{
[self setDelegate:inDelegate];
[self setElement:inElement];
}
}
-(void)dealloc
{
[_delegate release];
[_element release];
[super dealloc];
}
-(void)main
{
// do stuff
dispatch_async(dispatch_get_main_queue(), ^{
[[self delegate] doSomething:[self element]];
});
}
由於[[自委託] doSomething的:[自元素]]將在我的NSOperation對象可能已被釋放後被調用,在將此操作添加到隊列之前,是否需要確保在委託中保留「元素」?元素對象保留在應用程序的其他地方,但可能會在那裏釋放。我需要確保當我的委託從NSOperation接收它時,它仍然是一個有效的對象。
想知道在dispatch_async中調用它的行爲是否會保留傳遞給它的參數。我當然可以使用NSInvocation和performSelectorOnMainThread來保留它。
對不起 - 自己從init返回。我沒有添加到我的問題,但它在原代碼中。 – Trygve
喬希是正確的(見下文)。請參閱[Objective-C Blocks](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW4)在_Blocks編程主題:塊和變量__ – Rob