2

私は不可解なメモリリークを見つめながら、ここ数時間Instrumentsに住んでいます。私が書いた NSOperation サブクラスのこの 1 行のコードにそれを分離しました。

NSData *myData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:myURLString]];

これにより、定期的に 3500 バイトがリークされます。他の誰かがこれを見ていますか?もしそうなら、回避策はありますか?

前もって感謝します。

アップデート:

これは、私の NSOperation サブクラスの main() 本体内のコードの関連セクションです。

- (void)main {

// ...

NSData *sequenceData = 
[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:concatenatedURLString]];

NSString *sequenceString = 
[[NSString alloc] initWithBytes:[sequenceData bytes] length:[sequenceData length] encoding:NSUTF8StringEncoding];

NSDictionary *result = [NSDictionary dictionaryWithObjectsAndKeys:
self.chromosome, @"chromosome",
[NSNumber numberWithInt:self.basepairStart], @"basepairStart", 
[NSNumber numberWithInt:self.basepairEnd], @"basepairEnd", 
sequenceData, @"sequenceData", 
sequenceString,  @"sequenceString", 
nil];

[sequenceData   release];
[sequenceString release];

[self.target performSelectorOnMainThread:self.action withObject:result waitUntilDone:NO];


}

ご覧のとおり、sequenceData と sequenceString は適切に解放されています。また、このサブクラスのすべての ivar (染色体など) が適切にメモリ管理されていることを確認しました。

-ダグ

4

1 に答える 1

0

myData を解放または自動解放する必要があります。そうしないと、Cocoa メモリ管理ルールに従ってリークします。

于 2009-12-03T03:03:27.147 に答える