Obj-C では、プロパティを弱い/強いように構成できます。インスタンス変数。次のように -
@interface MyClass {
NSObject *a;
}
MyClass のオブジェクトは弱い参照a
または強い参照を保持していますか? オブジェクトが解放されるまで、iVar は解放されないと思います。iVar のようなプロパティに弱い/強いを指定しないのはなぜですか?
Obj-C では、プロパティを弱い/強いように構成できます。インスタンス変数。次のように -
@interface MyClass {
NSObject *a;
}
MyClass のオブジェクトは弱い参照a
または強い参照を保持していますか? オブジェクトが解放されるまで、iVar は解放されないと思います。iVar のようなプロパティに弱い/強いを指定しないのはなぜですか?
ivar へのデフォルトの参照は ですが__strong
、明示的に__weak
またはに設定できます。__strong
あなたの質問は私にインスピレーションを与え、私は ObjectiveC のメモリ管理について深く調べました。Apple Doc から入手したものを共有したいと思います。
インスタンス変数のデフォルトの動作
インスタンス変数は、デフォルトでオブジェクトへの強い参照を維持します
iVar のようなプロパティに弱い/強いを指定しないのはなぜですか?
ローカル変数と非プロパティ インスタンス変数は、デフォルトでオブジェクトへの強力な参照を維持します。デフォルトであるため、strong 属性を明示的に指定する必要はありません。
変数は、その変数がスコープ内にある限り、または別のオブジェクトまたは nil に再割り当てされるまで、オブジェクトへの強い参照を維持します。変数に強い参照を保持させたくない場合は、次のように __weak として宣言できます。
NSObject * __weak weakVariable;