0

私はこれを読んでいます:もし私がこのようなものを持っているなら:

@property (nonatomic, assign) UIView *anView;

そうすれば、メモリ管理について気にする必要はありません。-deallocメソッドで[anViewrelease]を実行する必要はありません。

なんで?

「assign」はコンパイラに「ねえ、このプロパティは誰もが割り当てたものを保持しません」と伝えるだけです。そして、あなたはするかもしれません

@synchronize anView;

コンパイラは魔法のようにゲッターとセッターを作成します。セッターは次のようになります。

- (UIView*) anView {
    return anView;
}

セッターは次のようになります。

- (void) setAnView:(UIView*)newAnView {
    anView = newAnView;
}

正しい/間違っていますか?それが正しければ、セッターはnewAnView変数の所有権を主張しません。これは、「保持」プロパティではないためです。それを受け取り、インスタンス変数に割り当てます。したがって、所有権ポリシーを検討する場合、-deallocでanViewインスタンス変数を解放する必要はありません。オブジェクトはそれを所有していません。それは正しいですか?

4

1 に答える 1

4

はい、あなたは基本的に正しいです。ガベージコレクターがオフになっていると仮定しましょう(そうでなければ、とにかく問題ではありません)。

'assign'プロパティを使用する場合、オブジェクトを保持したことがないため、オブジェクトを解放する必要はありません(他の誰かの責任です)。

基本的に、これは弱参照を作成します。プロパティがまだそれを指している間に、anViewの割り当てが解除される可能性があります。通常、オブジェクトではなく、プリミティブデータ型に「assign」を使用します。

于 2009-04-30T08:21:51.413 に答える