2016-12-05 27 views
0
Message *m = [msg retain]; 
dispatch_queue_t queue = _handle_queue; 
__block id delegate = self.protocol_delegate; 
dispatch_async(queue, ^{ 
    if (delegate && [delegate respondsToSelector:@selector(onReceive:)]) { 
     [delegate onReceive:m]; 
    } 
}); 

我有一個MRC Objective-C的文件,該文件聲明一個弱的委託,在MRC中使用弱代理安全嗎?

@property (nonatomic,weak) id<ProtocolDelegate> protocol_delegate; 

是委託將復位到零,如果委託被釋放?

回答

0

不,如果委託人發佈,它不會自動復位爲零。

ARC的本質是編譯器只會管理內部對象的生命週期/內存而不是外部對象。而對於MRC objective-c文件,所有對象都需要您的管理。

Altought protocol_delegate被聲明爲弱,它是組成依賴.m文件的最終可執行文件的目標文件。所以weak標籤被忽略。爲了獲得弱點,你需要製作a wrapper around it