おそらくorにweak
似ていますが、変数が指すオブジェクトが'ed' のときに変数が「ゼロ化」される点が異なります。しかし、ARC はコンパイラによって処理されるのに、なぜiOS 4 と Mac OS X 10.6 でサポートされないのでしょうか?assign
unsafe_unretained
weak
dealloc
weak
(この質問については、回答として推測をしないでください。事実/参照/ドキュメントによってより裏付けられたものを提供してください)
おそらくorにweak
似ていますが、変数が指すオブジェクトが'ed' のときに変数が「ゼロ化」される点が異なります。しかし、ARC はコンパイラによって処理されるのに、なぜiOS 4 と Mac OS X 10.6 でサポートされないのでしょうか?assign
unsafe_unretained
weak
dealloc
weak
(この質問については、回答として推測をしないでください。事実/参照/ドキュメントによってより裏付けられたものを提供してください)
__weak
現在のオブジェクト以外の場所で 1 つ以上のポインターをゼロにする必要があるため、弱い参照を追跡するために追加のデータ構造が必要です。これは、追加のトラッキングを必要としない__strong
、__unsafe_unretained
、および とは対照的です。__autoreleasing
それらを操作するための追跡構造とプログラムは、OSに組み込まれています。コンパイラは呼び出しを実行するコードを挿入しますが、コンパイルされたコードが機能するためには OS サポートが必要です。
__weak
参照には、古い iOS バージョンでは利用できないランタイム サポートが必要です。
10.6が弱参照をサポートできなかった技術的な理由はありません。実際、少なくとも1つのサードパーティ実装が利用可能です(たとえば、これ)。AppleはARCをサポートすることを決定しましたが、弱参照はありません。Appleがその選択をした実際の理由を知っている人は誰もがそれをstackoverflowに投稿することを許可されているとは思えません...だからあなたができることは推測することだけです。