15

の定義を知っていますunsafe_unretained

だから私は誰もその定義を書くことを期待していません。

例での使用方法と、メモリ管理との連携方法を知りたいです。

4

3 に答える 3

39

unsafe_unretainedARC(自動参照カウント)にのみ存在します。assignMRC (Manual Reference Counting)のように機能します。これらのプロパティは保持されません。通常、デリゲートにはそのようなプロパティを使用することをお勧めします。これは、デリゲートを保持する所有者が必要ないためです。

weakプロパティは に似unsafe_unretainedていますが、少し賢く機能する点が異なります。プロパティに割り当てられたオブジェクトが解放されると、弱い参照が自動的に になりnil、そのオブジェクト (そのメモリ アドレス) にメッセージを送信する際のクラッシュを回避します。

unsafe_unretainedプロパティはこれを行いません。それらは、そのアドレスに関連付けられたオブジェクトに関係なく、割り当てられたメモリ アドレスを常に保持します (手動で変更しない限り)。このような場合、弱参照はクラッシュを防ぐことができますが、それでも結果は期待どおりにはなりません。コードが整理され、適切に記述されている場合、これは発生しないはずです。

では、なぜunsafe_unretained代わりにを使用するのweakですか? 弱参照は iOS 5 以降でのみ使用できるため、iOS 4 を対象とする ARC アプリを構築する場合は、unsafe_unretainedプロパティを使用する必要があります。繰り返しになりますが、解放されたプロパティにメッセージを送信することは、コードに含めたいことではありません。コードがきちんと整理されていれば、これで問題はないはずです。

于 2013-04-12T17:45:47.210 に答える
2

ARC より前は、デリゲートまたはその他の参照から親へのプロパティを指定しassignて、保持サイクルを防ぐことができました。ARC と新しいコンパイラの導入により、代わりにunsafe_unretained.

したがって、参照の所有権が不要なとき、および新しい参照型を使用する必要がない、または使用したくないときはいつでも使用できますweak(割り当てが解除されると参照が無効になります)。

于 2013-04-12T10:26:59.857 に答える