因此,我正在使用 [NSThread detachNewThreadSelector] 来生成一个新线程,并且在控制台中出现“autoreleased with no pool in place”错误。我知道如果您未能创建自动释放池,就会发生这种情况,但问题是,我正在创建一个。我在同一个应用程序的其他部分使用了类似的代码,并且没有收到这些错误。
以下是相关代码:
- (void) startThread:(NSString*)strURL
{
// start new thread to load image
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[NSThread detachNewThreadSelector:@selector(loadImageFromURL:) toTarget:self withObject:strURL];
[pool release];
}
- (void) loadImageFromURL:(NSString*)strURL
{
NSNumber* nn = [NSNumber numberWithInt:self.tag];
NSLog(@"loadURL: Tag number == %i", [nn intValue]);
// other code here actually does the work
}
现在,在 loadImageFromURL 中有更多代码实际上可以完成工作(从远程服务器加载图像) - 但是没有该代码问题就表现出来了,所以我已经删除了它(只是为了让你不认为我有毫无意义的线程,什么都不做!)。我只留下了一行代码来演示这个问题——它创建了一个自动释放的 NSNumber 对象。
当这段代码运行时,它会向控制台报告:
__NSAutoreleaseNoPool(): Object 0x535c0e0 of class NSCFNumber autoreleased with no pool in place - just leaking
当然,真实代码会创建许多其他 AR 对象,并且所有这些对象也会被报告。
将不胜感激任何可能有帮助的提示或指示!
谢谢!