Вызов UIGetScreenImage () для порожденного вручную потока выводит сообщение «_NSAutoreleaseNoPool ():» для входа - PullRequest
0 голосов
/ 03 мая 2010

Это тело селектора, указанное в NSThread +detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument


    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    while (doIt)
    {
        if (doItForSure)
        {
            NSLog(@"checking");
            doItForSure = NO;

            (void)gettimeofday(&start, NULL);

            /* 
                do some stuff   */

            // the next line prints "_NSAutoreleaseNoPool():" message to the log
            CGImageRef screenImage = UIGetScreenImage();


            /*
                do some other stuff */

            (void)gettimeofday(&end, NULL);

            elapsed = ((double)(end.tv_sec) + (double)(end.tv_usec) / 1000000) - ((double)(start.tv_sec) + (double)(start.tv_usec) / 1000000);

            NSLog(@"Time elapsed: %e", elapsed);

            [pool drain];
        }
    }

    [pool release];

Даже при наличии пула автоматического выпуска, я получаю это распечатанное в журнале при вызове UIGetScreenImage():

2010-05-03 11:39:04.588 ProjectName[763:5903] *** _NSAutoreleaseNoPool(): Object 0x15a2e0 of class NSCFNumber autoreleased with no pool in place - just leaking

Кто-нибудь еще видел это с UIGetScreenImage() в отдельном потоке?

1 Ответ

0 голосов
/ 23 ноября 2010

[pool drain] на iOS ведет себя так же, как [pool release]. Таким образом, после первой итерации цикла while у вас не будет пула автоматического выпуска. Удалите drain, и все будет в порядке. Не уверен, что можно использовать UIGetScreenImage () в потоках, отличных от основного потока.

...