Создание нового потока приводит к утечке памяти в автоматическом выпуске - PullRequest
1 голос
/ 16 февраля 2011

Я использовал следующий код для создания новой темы:

[NSThread detachNewThreadSelector:@selector(backgroundMethod:) 
                                             toTarget:self 
                                             withObject:paramObject];

А затем в backgroundMethod я настроил новый пул автоматического выпуска как обычно:

-(void)backgroundMethod:(id)parameter
{
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

   //method stuff here...

  [pool drain];
}

Но как-то пул авто-релиза не работает. При запуске кода вывод на консоль выглядит следующим образом:

2011-02-17 00:38:16.928 audioEngine[13670:af03] *** __NSAutoreleaseNoPool(): Object
0x4b22370 of class NSThread autoreleased with no pool in place - just leaking

Ранее я использовал несколько потоков одним и тем же способом, и у меня не было подобных проблем - что я делаю не так?

Любая помощь очень ценится! Спасибо:)

РЕДАКТИРОВАТЬ: Хорошо, это кажется немного странным - я создал пул автоматического выпуска в методе, из которого создается новый поток, и проблема исчезла. Любая идея относительно того, почему это может быть и какой правильный способ это исправить? Я бы предпочел не иметь случайного пула автоматического выпуска в моем коде, не зная, что он на самом деле делает и почему проблема исчезла.

EDIT2: Вот код, создающий основной пул автоматического выпуска:

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

1 Ответ

1 голос
/ 16 февраля 2011

Кажется, что он жалуется на то, что detachNewThreadSelector: call - это тот, который не выполняется с пулом автоматического выпуска, а не чем-то внутри функции backgroundMethod, так что, когда backgroundMethod завершает выполнение, объект потока выполняетсяутечка.

Убедитесь, что для потока (основного потока), создающего фоновый поток, настроен пул автоматического выпуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...