アークの時代のプロパティ対ivar
-
27-10-2019 - |
質問
設定変数がデフォルトであるため、IVARの設定が割り当てられているオブジェクトを保持するようになったことを理解しています。 strong
予選。 ivarsはオブジェクトの範囲内にあるため、それらはで宣言されています strong
変数の範囲内でオブジェクトを保持します。これは、IVARを含むオブジェクトがまだ生きている間、IVARS値が決してリリースされないことを意味します。
これは正しいです?
もしそうなら、私は、メモリ管理の観点から、保持(強い)プロパティと単純なIVARの間に違いがないと考えているのですか?
解決
変数の場合:
- 使用してクラスで宣言されています アーク.
- クラスの実装のみに使用されます(クラスインターフェイスの一部として公開されていません)。
- 何も必要ありません KVO.
- カスタムゲッター/セッターは必要ありません。
それから、それを対応することなくivarとして宣言することが適切です @property
/@synthesize
, 、および実装内で直接参照します。インラインです カプセル化 クラス実装ファイルでこのivarを宣言します。
// MyClass.h
@interface MyClass : ParentClass
@end
// MyClass.m
@implementation MyClass {
NSString *myString;
}
- (void)myMethod {
myString = @"I'm setting my ivar directly";
}
@end
- このivarは扱われます
__strong
ARCコンパイラによって。 - に初期化されます
nil
それがオブジェクトの場合、または0
それが原始の場合。
他のヒント
使用できません KVO また、ARCを使用する場合に非常に似ていること以外のインスタンス変数を使用して、カスタムゲッターとセッターを実行します。
所属していません StackOverflow