0

最新のアプリでメモリ リークのクリーンアップ モードを使用していますが、解決できない問題に遭遇しました。

次のメソッドは、1 つの厄介な問題を除いてクリーンアップされました。Instruments は、オブジェクトを作成している時点で、itemsToKeep と呼ばれる NSMutableArray がメモリをリークしていることを教えてくれます。私がメモリをリークしている理由についてのアイデアをいただければ幸いです。

以下に、retainCounts に関するいくつかの注意事項を示します。メソッドに入る: self.myList は、retainCount = 1 であり、メソッドを終了する: self.myList は、retainCount = 2 で、itemsToKeep は、retainCount= 2 です。どちらも 1 までカウントダウンしますが、しばらくするとアプリがクラッシュします (その理由はわかっていると思います)。

itemsToKeepのメモリリークを取り除く方法を知っている人はいますか?

ありがとう。

-(void)parsedScores:(BOOL)shouldAdd {

//trim space, tab, newline from both ends
NSString *tmp = self.lblCurrentName.text;
NSString *list = [self trimString:tmp];

NSString *separators = @",";

[self.myList removeAllObjects]; // doesn't impact retain counts

self.myList = (NSMutableArray *)[list componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:separators]]; //this bumps up the self.myList retain count to 2

NSMutableArray *itemsToKeep = [NSMutableArray arrayWithCapacity:30];    

for (NSString *item in self.myList) { 
    NSString *tmpItem = [self trimString:item];
    if (! [self shouldRemoveItem:tmpItem]) {
        [itemsToKeep addObject:tmpItem];
    }   
}

self.myList = itemsToKeep; //makes both variables' retain counts = 2

}

4

1 に答える 1

0

あなたが提供したメソッドにはリークが見られないので、他の場所で発生していると思います。self.myListリリースされずに別の場所に保持されているかどうかを確認する必要があります。

また、デバッグ目的で保持カウントを確認するべきではありません。保持カウントは誤解を招く可能性があります。これは、オブジェクトが同じ回数だけ解放されている限り、オブジェクトが保持される回数は問題ではないためです。

于 2009-12-27T05:37:41.987 に答える