3

おそらくorにweak似ていますが、変数が指すオブジェクトが'ed' のときに変数が「ゼロ化」される点が異なります。しかし、ARC はコンパイラによって処理されるのに、なぜiOS 4 と Mac OS X 10.6 でサポートされないのでしょうか?assignunsafe_unretainedweakdeallocweak

(この質問については、回答として推測をしないでください。事実/参照/ドキュメントによってより裏付けられたものを提供してください)

4

3 に答える 3

4

__weak現在のオブジェクト以外の場所で 1 つ以上のポインターをゼロにする必要があるため、弱い参照を追跡するために追加のデータ構造が必要です。これは、追加のトラッキングを必要としない__strong__unsafe_unretained、および とは対照的です。__autoreleasingそれらを操作するための追跡構造とプログラムは、OSに組み込まれています。コンパイラは呼び出しを実行するコードを挿入しますが、コンパイルされたコードが機能するためには OS サポートが必要です。

于 2012-09-12T10:43:16.330 に答える
2

__weak参照には、古い iOS バージョンでは利用できないランタイム サポートが必要です。

于 2012-09-12T10:42:09.960 に答える
1

10.6が弱参照をサポートできなかった技術的な理由はありません。実際、少なくとも1つのサードパーティ実装が利用可能です(たとえば、これ)。AppleはARCをサポートすることを決定しましたが、弱参照はありません。Appleがその選択をした実際の理由を知っている人は誰もがそれをstackoverflowに投稿することを許可されているとは思えません...だからあなたができることは推測することだけです。

于 2012-09-12T11:03:42.450 に答える