2010-11-22 13 views
1

インターフェイスに保持し、コードのどこかに割り当てるプロパティがある場合は、コード内で解放し、deallocメソッドで解放する必要があります。つまり、保持カウント2?インターフェイスから保持でのメモリ管理の問題

NSMutableData *xmlData; 
@property (nonatomic, retain) NSMutableData *xmlData; 

実装から:あなたはのdeallocでそれをreleaseする必要が

@synthesize xmlData; 

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

xmlData = [[NSMutableData alloc] init]; 

答えて

3

retainに設定する必要がある場合は、設定するときの方法です。

あなたが直接それを行う場合は、あなたがそれを保持する必要があります。

xmlData = [[NSMutableData alloc] init]; 

あなたがセッターを使用している場合、それは自動的に行わので、あなたが(それはautoreleaseされていない場合)、それを解放する必要がありますされています

NSMutableData *data = [[NSMutableData alloc] init]; 
self.xmlData = data; 
[data release]; 
0

Xcodeプロファイラ経由で実行し、割り当てを選択すると、各オブジェクトの数が表示されます。

0

あなたの例では、ivarを - (void)deallocで解放する必要があります。

私は、アクセッサ/ミューテータ(ゲッタ/セッタ)を介してivarsにしかアクセスしないので、私がivarを割り当てて初期化するときには、次のことを行います。

NSMutableData *lXMLData = [[NSMutableData alloc] init]; 
self.xmlData = lXMLData; 
[lXMLData release]; 

が、私はそれがうまく整理すべてとバランスを保つ見つける

私も見てきました

self.xmlData = [[[NSMutableData alloc] init] autorelease]

私のアプローチ(私はファンではない)...唯一のアクセサ/ミューテータ

  • のAlloc/initのローカルVAR
  • 割り当てローカルVAR経由

    • アクセスアイバーズto ivar(クラス 変数)
    • ローカルローカル変数