質問

設定変数がデフォルトであるため、IVARの設定が割り当てられているオブジェクトを保持するようになったことを理解しています。 strong 予選。 ivarsはオブジェクトの範囲内にあるため、それらはで宣言されています strong 変数の範囲内でオブジェクトを保持します。これは、IVARを含むオブジェクトがまだ生きている間、IVARS値が決してリリースされないことを意味します。

これは正しいです?

もしそうなら、私は、メモリ管理の観点から、保持(強い)プロパティと単純なIVARの間に違いがないと考えているのですか?

役に立ちましたか?

解決

変数の場合:

  1. 使用してクラスで宣言されています アーク.
  2. クラスの実装のみに使用されます(クラスインターフェイスの一部として公開されていません)。
  3. 何も必要ありません KVO.
  4. カスタムゲッター/セッターは必要ありません。

それから、それを対応することなく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を使用する場合に非常に似ていること以外のインスタンス変数を使用して、カスタムゲッターとセッターを実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top