Вызов 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() в потоках, отличных от основного потока.

Другие вопросы по тегам