私はARCとiOS5用に設計されたライブラリを持っていましたが、顧客はiOS4.x用に構築したいと考えていました。修飾子を使用してプロパティをに変換しましたが、メモリの破損が発生しているようですweak-esqがクラッシュします。unsafe_unretainedクラッシュの場合、私はこのようなデリゲートプロパティを持っています
@property (unsafe_unretained) id<MYDelegateProtocol> delegate;
そして私@synthesizeはivarです。
デリゲートでメソッドを呼び出したいときはいつでも、そうであるかどうかを確認し、そうnilでない場合はメソッドを呼び出します。そのプロトコルにはオプションのメソッドがないため、チェックしませんrespondsToSelector。
しかし、に変更してweakからunsafe_unretained、どうやら参照が消えて、ダングリングポインタが残っていることがわかりました。ObjC Exceptions(認識されないメッセージの場合)にブレークポイントを設定し、次にpoオブジェクトのアドレスを設定すると、デリゲートのプロトコルを実装していないオブジェクトであることがわかります。もちろん、クラッシュします。
使用するときunsafe_unretainedに、参照が「なくなった」ことをどのように知ることができますか?私のコードは、以前にゼロ化されたポインターに依存していました。