0

这是在中指定的选择器的主体NSThread +detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    同时(做)
    {
        如果 (doItForSure)
        {
            NSLog(@"检查");
            doItForSure = 否;

            (void)gettimeofday(&start, NULL);

            /*
                做一些事情*/

            // 下一行打印“_NSAutoreleaseNoPool():”消息到日志
            CGImageRef screenImage = UIGetScreenImage();


            /*
                做一些其他的事情*/

            (void)gettimeofday(&end, NULL);

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

            NSLog(@"经过的时间:%e", elapsed);

            [池排水];
        }
    }

    [池释放];

即使存在自动释放池,我在调用时也会将其打印到日志中UIGetScreenImage()

2010-05-03 11:39:04.588 ProjectName[763:5903] *** _NSAutoreleaseNoPool(): NSCFNumber 类的对象 0x15a2e0 自动释放,没有适当的池 - 只是泄漏

有没有其他人UIGetScreenImage()在单独的线程上看到过这个?

4

1 回答 1

0

[pool drain]在 iOS 上的行为与[pool release]. 因此,在您的 while 循环的第一次迭代之后,您最终没有自动释放池。删除drain,你应该没问题。不过,不确定是否可以在主线程以外的线程中使用 UIGetScreenImage() 。

于 2010-11-23T11:15:48.540 回答