【问题标题】:Is it safe to use weak delegate in block in MRC?在 MRC 中使用弱委托是否安全?
【发布时间】:2016-12-05 02:36:36
【问题描述】:
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 目标 c 文件,它声明了一个弱委托,

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

如果委托被释放,委托是否会重置为零?

【问题讨论】:

    标签: objective-c memory-management delegates


    【解决方案1】:

    不,如果委托释放,它不会自动重置为零。

    ARC 的本质是编译器只会管理内部对象的生命周期/内存,而不是外部对象。而对于MRCobjective-c 文件,所有对象都需要你管理。

    尽管protocol_delegate 被声明为弱,它是构成最终可执行文件的目标文件,而最终可执行文件又依赖于.m 文件。所以weak 标签被忽略。为了得到weakptr,你需要a wrapper around it

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-15
      • 2018-11-08
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      相关资源
      最近更新 更多