“ assign”で設定されたアウトレットをリリースする必要がないのはなぜですか?
-
03-07-2019 - |
質問
次のようなものがある場合は読んでいます:
@property (nonatomic, assign) UIView *anView;
その後、メモリ管理を気にする必要はありません。 -deallocメソッドで[anView release]を実行する必要はありません。
なぜ?
" assign"コンパイラーに次のように伝えます。「おい、このプロパティは誰が割り当てたものも保持しません」そして、あなたはそうすることができます
@synchronize anView;
そしてコンパイラーは魔法のようにゲッターとセッターを作成します。セッターは次のようになります。
- (UIView*) anView {
return anView;
}
およびセッターは次のようになります:
- (void) setAnView:(UIView*)newAnView {
anView = newAnView;
}
正しい/間違っている?それが正しければ、セッターは「保持」ではないため、newAnView変数の所有権を主張しません。プロパティ。それを取得して、インスタンス変数に割り当てます。そのため、所有権ポリシーを検討する場合、-deallocでanViewインスタンス変数を解放する必要はありません。オブジェクトはそれを所有していません。それは正しいですか?
解決
はい、基本的に正しいです。ガベージコレクターがオフになっていると仮定しましょう(そうでなければ、それはとにかく重要ではありません)。
「assign」プロパティを使用する場合、オブジェクトを保持することはないので、オブジェクトを解放する必要はありません(誰かの責任です)。
本質的に、これは弱い参照を作成します-プロパティがまだ参照している間にanViewの割り当てが解除される場合があります。通常、オブジェクトではなくプリミティブデータ型に「assign」を使用します。
所属していません StackOverflow