【问题标题】:Calling UIGetScreenImage() on manually-spawned thread prints "_NSAutoreleaseNoPool():" message to log在手动生成的线程上调用 UIGetScreenImage() 会打印“_NSAutoreleaseNoPool():”消息以记录
【发布时间】:2011-02-15 02:25:00
【问题描述】:

这是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() 的这个?

【问题讨论】:

    标签: iphone screen-scraping nsthread nsautoreleasepool


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多