2016-12-05 4 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; 

は、デリゲートがnilにリセットされますか?

答えて

0

いいえ、デリゲートがリリースされた場合は、nilに自動リセットされません。

本質的にARCは、コンパイラが外部オブジェクトではなく内部オブジェクトのライフサイクル/メモリのみを管理するということです。一方、MRC objective-cファイルの場合、すべてのオブジェクトに管理が必要です。

アルファベットprotocol_delegateはweakと宣言されています。最終的な実行可能ファイルを構成するオブジェクトファイルは.mファイルに依存します。したがって、weakタグは無視されます。弱者を得るためには、a wrapper around itを作る必要があります。

関連する問題