2011-01-05 1 views
5

私は自分のアプリを叩き始めて、深く掘り下げて走っていますが、すごく走っています。@synthesizeを保持している@プロパティを持つすべてのものをリリースしますか?

すべての@property(nonatomic、retain)に対して、deallocメソッドで[variable release]を持つ必要があるため@synthesizeを作成します - これは正しいですか?

IBOutletの場合でも、

+0

+1良い明瞭さ。 – gabaum10

+0

@Joe(または 'copy') –

+0

ありがとう、私はそれが最終的に私の厚い頭蓋骨を通してそれを作ったと思う。 – Slee

答えて

11

はい。オブジェクトの所有権をretainプロパティにすることでオブジェクトの所有権を宣言しました。つまり、オブジェクトを解放して所有権を放棄する必要があります。

+2

も参照してください:http://stackoverflow.com/questions/2189919/how-is-release-handled-for-synthesized -retain-properties –

+0

ありがとう、私の最初のプログラムと私はちょうどオフトラック - リリースするプロパティのトンを持っている:) – Slee

+0

あなたはアクセサリーをチェックアウトしたいと思うかもしれない...それはあなたの人生を簡単になります。 http://www.kevincallahan.org/software/accessorizer.html関連するコメントとして – joshpaul

1

はい。あなたがプロパティを保持する場合、それをリリースする責任があります。

宣言されたプロパティは、基本的にアクセサメソッド宣言の代わりになります。プロパティを合成すると、コンパイラーは不在のアクセサメソッドしか作成しません。 deallocメソッドとの直接の対話はありません。プロパティは自動的に解放されません。

Declared Properties

通常は、あなたのdeallocメソッドでこれを行います。また

- (void)dealloc { 
    [property release]; 
    [super dealloc]; 
} 
4

あなたが保持IBOutletを持っている場合、あなたはそれを解放し、-viewDidUnloadnilに設定する必要があります。これにより、ビューが削除されたときに、特にメモリ不足の警告に応答して、オブジェクトがコンセントを解放できるようになります。その方法でivarをnilに設定すると、オブジェクトが後で割り当て解除された場合にivarを二重に解放するリスクを回避できます。

関連する問題