2012-05-07 1 views
0

私はコードのリークをチェックするためにInstrument leaksツールを使用しています。NSMutableArrayは、装置によってアドレス指定された警告を漏らします。

//MyClass.h 
@property (nonatomic, retain) NSMutableArray *marrProperty; 

//MyClass.m 
NSSortDescriptor *createdTime = [[NSSortDescriptor alloc] initWithKey:@"createdTime" ascending:NO selector:@selector(compare:)];    
NSArray *sortedArray = [self.anManagedObj.aRelationships sortedArrayUsingDescriptors:[NSArray arrayWithObject:createdTime]]; 
[createdTime release]; 
NSMutableArray *marr = [[NSMutableArray alloc] initWithArray:sortedArray]; 
self.marrProperty = marr; 
[marr release]; 

インストゥルメントの漏れツールで確認した後、私はリークが次のコードで起こったと言われました:

NSMutableArray *marr = [[NSMutableArray alloc] initWithArray:sortedArray]; 
self.marrProperty = marr; 

私はなぜ知らない、私はただのallocとも離しているため。

答えて

4

インストゥルメントでは、リークされたオブジェクトがリークされた場所ではなく、割り当てられていることを示しています。

retainを追加する必要があります。インストゥルメントを使ってそれを行うことができます。 Allocations計測器は、保持/解放イベントを追跡するように構成することができます。

This will likely be helpful

+0

まあ、なぜ私はすべてのヒープショットにNSMutableArrayがないのかわかりません。 –

+0

あなたは1つしか漏れていない可能性があります。したがって、その1つをクリックし、保持/解放履歴をチェックして、余分な保持がどこから来ているかを確認します。 – bbum

+0

追跡には、(イベントタイプ、RefCt)、(Malloc、1)、(Retain、2)、(リリース1) –

1

marrPropertyのカスタムセッターを実装しましたか?これは記憶上の問題の原因となる可能性があります。

の代わりに[[sortedArray mutableCopy] autorelease]を使用し、その後にreleaseを使用することをお勧めします。コードを明瞭にするためだけです。

ARCを使用していない場合は、そのクラスの-deallocでmarrPropertyをリリースしてください。

+0

@systhesize marrProperty –

+0

このコードに問題はありません。そのクラスのdeallocメソッドでmarrPropertyを解放していますか? Retainプロパティはdeallocで解放する必要があります。 –

+0

私はARCを使用しているので、deallocを行う必要はありません –

関連する問題