Отдельная утечка памяти NSThread - PullRequest
0 голосов
/ 23 апреля 2011

При использовании инструментов я получил утечку памяти в этом методе отсоединенной нити:

-(void)goToThisUrl:(id) targetUrl
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    if (someCondition) {
        // Doing some stuff here
    }
    // Instruments show memory leak on data
    else {
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString: targetUrl]];
        myTargetImage = [UIImage imageWithData:data];
        // When releasing data(because data retainCount = 2), i got:
        // Incorrect decrement of the reference count of an object that is not owned at this point by the caller
        //[data release];
    }   
    [pool release];
}

Я не понимаю эту утечку.

Спасибо.

1 Ответ

1 голос
/ 23 апреля 2011

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

  • , если кто-то в другом месте сохраняет, но неправильно освобождает myTargetImage, тогда возможно, что данные будут утечки, и инструменты покажутВы указали местоположение, потому что оно сообщает , где был создан объект, а не где оно просочилось
  • «По большей части классы UIKit должны использоваться только из основного потока приложения».( источник );если вы не обладаете определенными правами на то, что UIImage + imageWithData безопасен (и я не могу их найти, но Apple очень усложнила поиск такого рода деталей), то то, что вы делаете, технически незаконно и странная функциональность, такая как утечка, не должнане удивительно.
...