2016-12-05 49 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