16

Obj-C では、プロパティを弱い/強いように構成できます。インスタンス変数。次のように -

@interface MyClass {
NSObject *a;
}

MyClass のオブジェクトは弱い参照aまたは強い参照を保持していますか? オブジェクトが解放されるまで、iVar は解放されないと思います。iVar のようなプロパティに弱い/強いを指定しないのはなぜですか?

4

3 に答える 3

16

ivar へのデフォルトの参照は ですが__strong、明示的に__weakまたはに設定できます。__strong


于 2013-05-09T12:11:08.333 に答える
15

あなたの質問は私にインスピレーションを与え、私は ObjectiveC のメモリ管理について深く調べました。Apple Doc から入手したものを共有したいと思います。

インスタンス変数のデフォルトの動作

インスタンス変数は、デフォルトでオブジェクトへの強い参照を維持します

iVar のようなプロパティに弱い/強いを指定しないのはなぜですか?

ローカル変数と非プロパティ インスタンス変数は、デフォルトでオブジェクトへの強力な参照を維持します。デフォルトであるため、strong 属性を明示的に指定する必要はありません。
変数は、その変数がスコープ内にある限り、または別のオブジェクトまたは nil に再割り当てされるまで、オブジェクトへの強い参照を維持します。

変数に強い参照を保持させたくない場合は、次のように __weak として宣言できます。

  NSObject * __weak weakVariable;
于 2013-05-09T14:16:56.310 に答える