iphone - утечки памяти в отдельном потоке - PullRequest
0 голосов
/ 18 апреля 2010

Я создаю второй поток для вызова метода, который загружает несколько изображений, используя:

[NSThread detachNewThreadSelector:@selector(downloadImages) toTarget:self withObject:nil];

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

2010-04-18 00: 48: 12.287 FS Companion [11074: 650f] *** _NSAutoreleaseNoPool (): объект 0xbec2640 класса NSCFString автоматически освобожден без пула на месте - только утечка Стек: (0xa58af 0xdb452 0x5e973 0x5e770 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

2010-04-18 00: 48: 12.288 FS Companion [11074: 650f] *** _NSAutoreleaseNoPool (): объект 0xbe01510 класса NSCFString автоматически освобожден без пула на месте - только утечка Стек: (0xa58af 0xdb452 0x5e7a6 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

2010-04-18 00: 48: 12.289 FS Companion [11074: 650f] *** _NSAutoreleaseNoPool (): объект 0xbde6720 класса NSCFString автоматически освобожден без пула на месте - только утечка Стек: (0xa58af 0xdb452 0x5ea73 0x5e7c2 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

Может кто-нибудь помочь мне понять проблему?

Ответы [ 2 ]

3 голосов
/ 18 апреля 2010

Ошибка "_NSAutoreleaseNoPool()". В потоке нет выделенного по умолчанию NSAutoreleasePool. Вам нужно создать его самостоятельно, иначе объекты -autorelease будут пропущены.

Ваш -downloadImages поэтому должен выглядеть так:

-(void)downloadImages {
  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
  ...
  [pool drain];
}
1 голос
/ 18 апреля 2010

У меня просто похожая проблема ... с забавными вложенными нитями, чертовски протекающими.

Не забудьте освободить пул тоже. : -)

-(void)downloadImages {
   NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
   ...
   [pool release];  
   pool =nil;
}
...