Iphone 使用NSOperationQueue在独立线程上创建自动释放对象
这是一个关于自动释放、Cocoa线程和NSOperationQueue的一般性问题 我使用NSOperationQueue执行某些API调用,解析结果并将其返回到主线程。NSOperationQueue在新线程上执行这些操作。如果我理解正确的话,每次启动一个新线程时,都会在该线程周围创建一个自动释放池,该池在线程完成时释放 这就是给我带来麻烦的案子。我将分配的NSArray传递给NSOperationQueue。在操作过程中,数组将填充一组创建的自动释放对象。然后数组返回到主线程Iphone 使用NSOperationQueue在独立线程上创建自动释放对象,iphone,objective-c,multithreading,cocoa,autorelease,Iphone,Objective C,Multithreading,Cocoa,Autorelease,这是一个关于自动释放、Cocoa线程和NSOperationQueue的一般性问题 我使用NSOperationQueue执行某些API调用,解析结果并将其返回到主线程。NSOperationQueue在新线程上执行这些操作。如果我理解正确的话,每次启动一个新线程时,都会在该线程周围创建一个自动释放池,该池在线程完成时释放 这就是给我带来麻烦的案子。我将分配的NSArray传递给NSOperationQueue。在操作过程中,数组将填充一组创建的自动释放对象。然后数组返回到主线程 既然自动释放的
谢谢大家!
NSOperation
s需要为其创建一个NSAutoReleasePool
-(void)main
{
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
//All NSOperation code here
[pool drain];
}
谢谢你,乔。对于2,我不知道如何在子线程退出时将ref count>0的对象的责任转移到主线程自动释放池。这是一种错误的想法吗?当您调用
-[NSAutoReleasePool drain]
时,它将正确地取消对任何保留对象的引用,并且此时保留计数为0的所有对象都将被解除分配。谢谢Joe,这已经回答了我的问题。这里有类似的讨论,但没有完全解决我的问题。