Вызов UIGetScreenImage() для порожденного вручную потока выводит сообщение "_NSAutoreleaseNoPool():" для входа
Это тело селектора, указанного в NSThread +detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; while (doIt) { if (doItForSure) { NSLog(@"проверяя"); doItForSure = NO; (void)gettimeofday(&start, NULL); /* что-то сделать */ // следующая строка выводит сообщение "_NSAutoreleaseNoPool():" в журнал CGImageRef screenImage = UIGetScreenImage(); /* делать другие вещи */ (void)gettimeofday(&end, NULL); elapsed = ((double)(end.tv_sec) + (double)(end.tv_usec) / 1000000) - ((double)(start.tv_sec) + (double)(start.tv_usec) / 1000000); NSLog(@"Время истекло: %e", прошло); [сток бассейна]; } } [релиз пула];
Даже при наличии пула автоматического выпуска я получаю это напечатано в журнал, когда я звоню UIGetScreenImage()
:
2010-05-03 11: 39: 04.588 ProjectName [763: 5903] *** _NSAutoreleaseNoPool (): объект 0x15a2e0 класса NSCFNumber автоматически освобожден без пула на месте - только утечка
Кто-нибудь еще видел это с UIGetScreenImage()
в отдельном потоке?
1 ответ
[pool drain]
на iOS ведет себя так же, как [pool release]
, Таким образом, после первой итерации цикла while у вас не будет пула автоматического выпуска. Удалить drain
и ты должен быть в порядке. Не уверен, что можно использовать UIGetScreenImage() в потоках, отличных от основного потока.