2

私を助けるためにARCの知識を持つ人が必要になります.

基本的に、クラスでいくつかの変数をそのように宣言しました

@interface Class{
    NSString* one;
    NSString* two;
}

@property(nonatomic,weak) NSString* one;

ご覧のとおり、弱い識別子を に設定できますNSString* one。ただし、getter/setter/synthesizerNSString* twoは単なる共通変数であるため、必要ありません。weakメモリの割り当てが解除されるようにラベルを設定するにはどうすればよいですか? それとも自動的に設定されますか?

4

3 に答える 3

5

次のように実行できます。

__weak NSString *two;

しかし、この場合はおそらくやりたくないでしょう。

インスタンス変数を宣言する__weakということは、他のオブジェクトが参照を保持している限り、ターゲット オブジェクト (この場合は文字列) への参照が存在することを意味します。強い参照を保持している最後のオブジェクトが文字列を解放すると、変数twonil自動的に削除されます。これは、親子階層など、オブジェクトが相互に参照を保持している場合に非常に便利です。オブジェクトへの参照をNSString *two保持できない可能性があるため、その__weak参照を使用することは非常に疑わしいです。

于 2012-07-05T10:07:22.823 に答える
0

私のアドバイス(そして私は間違っているかもしれないがAppleのアドバイス)は、常にiVarのプロパティを使用する習慣を身につけることであり、そうすればこの問題はなくなる。

于 2012-07-05T10:06:31.827 に答える
0

心配することなくこれを行うことができます:

NSString* two = [[NSString alloc] init];

クラスのインスタンスがClass何らかの理由で解放されると、(理論的には) を参照しているのは 1 つだけであるため、two割り当てが解除されます。

于 2012-07-05T09:55:05.113 に答える