initWithContentsOfURL утечки памяти в подклассе NSOperation. Кто-нибудь еще видел это? - PullRequest
2 голосов
/ 03 декабря 2009

Я живу на Instruments последние несколько часов, уставившись на удивительную утечку памяти. Я выделил его на эту единственную строку кода в подклассе NSOperation, который я написал:

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

Периодически это приведет к утечке 3500 байт. Кто-нибудь еще видит это? Если да, то есть ли обходной путь?

Заранее спасибо.

UPDATE:

Вот соответствующий раздел кода в теле main () моего подкласса NSOperation:

- (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 правильно освобождены. Также я подтвердил, что все ивары этого подкласса (хромосома и т. Д.) Правильно управляются памятью.

-Doug

1 Ответ

0 голосов
/ 03 декабря 2009

Вы должны освободить или автоматически освободить myData, в противном случае они будут утекать в соответствии с Правилами управления памятью какао

...