2011-01-26 10 views
0

私のコードでメモリリークを取得したいのですが、どのようにしてメモリリークを修正できますか?メモリリークiPhoneの問題?

dashboard = [[NSMutableArray alloc] init]; 
[dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; // memory leaks here. 


if (theConnection) { 
    receiveData = [[NSMutableData data] retain]; //memory leaks here. 
} 

しかし、私はdealloc - in [receiveData release]をリリースしましたが、メモリリークが発生しました。私は保持を知っている、カウントが増加しますが、どのように私は適切にデータをリリースすることができます。

ありがとうございます!

答えて

2

を削除されます。私はライン内のあなたのリークと思います:

[dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; 

ちょうど変更あなたは、彼らが作成したオブジェクトを自動解放便利な作成方法を使用することができますので、それは

[dashboard addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; 

へのaddObjectは、オブジェクトを保持します。

と他の可能性のあるリーク... receiveDataをretain属性を持つプロパティとして定義すると、明示的にretainを呼び出す必要はありません。 self.recieveData = [NSMutableData data]に電話することができます。これはそれを保持します。もちろん、deallocでそれを解放する必要があります。返信用

NSMutableArray *anArray = [[[NSMutableArray alloc] init] autorelease]; 
[sections setValue:anArray forKey:display_date]; 
2

dashboard addObject:[[NSDictionary alloc] initWithObjectsAndKeys:@"demo_1.jpg",@"pic_source",@" Head",@"Title",nil]; あなたはオブジェクトを所有しています。あなたがそれを配列に置くと、保持物も呼ばれました。 autoreleaseを呼び出してリークを修正してください。

receiveData = [[NSMutableData data] retain]; - releaseに電話する場合、このオブジェクトは範囲外のときに削除されます。あなたは

receiveData = [NSMutableData data]; 

を書きます場合は、それらの中にinit単語とメソッドを使用している場合、それは自動的に

範囲のうちEDIT

削除されます、あなたはそのようなオブジェクトの所有者であるとreleaseメソッドを呼び出すまで自動的に削除されません。オブジェクトを所有したくない場合は、静的メソッドを使用してオブジェクトを作成します。たとえば:

NSMutableArray *array = [NSMutableArray arrayWithObjects: ... , nil]; 

それは

NSMutableArray *array = [[[NSMutableArray alloc] initWithObjects: ... , nil] autorelease]; 

自動解放を呼び出すのと同じだオブジェクトは時にスコープの外release方法を受け取ることを意味します - 、それが保持されなかった場合は、自動的に

+0

ありがとう:コードを表示する

EDIT。この場合、 "[セクションsetValue:[[NSMutableArray alloc] init] forKey:display_date];" //ここにメモリリークがあります。どのように私はリークを修正することができますか? – Pugal

+0

init wordでメソッドを使用している場合は、オブジェクトの所有者であることを意味します。たとえば、[NSMutableArray arrayWithObjects:...]を呼び出すことができます。あなたはオーナーではありません。あるいは、initの後でautoreleaseメソッドを呼び出すこともできます。 – Andrew