の定義を知っていますunsafe_unretained
。
だから私は誰もその定義を書くことを期待していません。
例での使用方法と、メモリ管理との連携方法を知りたいです。
unsafe_unretained
ARC(自動参照カウント)にのみ存在します。assign
MRC (Manual Reference Counting)のように機能します。これらのプロパティは保持されません。通常、デリゲートにはそのようなプロパティを使用することをお勧めします。これは、デリゲートを保持する所有者が必要ないためです。
weak
プロパティは に似unsafe_unretained
ていますが、少し賢く機能する点が異なります。プロパティに割り当てられたオブジェクトが解放されると、弱い参照が自動的に になりnil
、そのオブジェクト (そのメモリ アドレス) にメッセージを送信する際のクラッシュを回避します。
unsafe_unretained
プロパティはこれを行いません。それらは、そのアドレスに関連付けられたオブジェクトに関係なく、割り当てられたメモリ アドレスを常に保持します (手動で変更しない限り)。このような場合、弱参照はクラッシュを防ぐことができますが、それでも結果は期待どおりにはなりません。コードが整理され、適切に記述されている場合、これは発生しないはずです。
では、なぜunsafe_unretained
代わりにを使用するのweak
ですか? 弱参照は iOS 5 以降でのみ使用できるため、iOS 4 を対象とする ARC アプリを構築する場合は、unsafe_unretained
プロパティを使用する必要があります。繰り返しになりますが、解放されたプロパティにメッセージを送信することは、コードに含めたいことではありません。コードがきちんと整理されていれば、これで問題はないはずです。
ARC より前は、デリゲートまたはその他の参照から親へのプロパティを指定しassign
て、保持サイクルを防ぐことができました。ARC と新しいコンパイラの導入により、代わりにunsafe_unretained
.
したがって、参照の所有権が不要なとき、および新しい参照型を使用する必要がない、または使用したくないときはいつでも使用できますweak
(割り当てが解除されると参照が無効になります)。