0

コード内のリークをチェックするためにインストルメント リーク ツールを使用しています。

//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];

Instrument のリーク ツールで確認したところ、次のコードでリークが発生していることがわかりました。

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

よく割り当てて解放するだけなので、理由はわかりません。

4

2 に答える 2

4

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

余分なものを見つける必要がありますretain。Instruments を使用してそれを行うことができます。割り当てインストゥルメントは、保持/解放イベントを追跡するように構成できます。

これはおそらく役に立ちます

于 2012-05-07T06:28:06.000 に答える
1

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

さらに、[[sortedArray mutableCopy] autorelease]initWithArray:後にrelease. 単にコードを明確にするためです。

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

于 2012-05-07T06:21:32.270 に答える