这是关于自动释放,Cocoa线程和NSOperationQueue的一般性问题。
我正在使用NSOperationQueue执行某些API调用,解析结果并将其返回给主线程。 NSOperationQueue在新线程上执行这些操作。如果我每次启动新线程时都能正确理解,则会在该线程周围创建一个自动自动释放池,该线程在线程完成时释放。
这是给我带来麻烦的情况。我将分配的NSArray传递给NSOperationQueue。在操作期间,数组将填充一堆自动释放的对象,这些对象将被创建。然后将数组返回到主线程。
由于在线程上创建了自动释放的对象,它们是否会被释放?根据我的理解,他们不应该因为他们的参考数是1,在他们被加入NSArray之后。
谁现在拥有发布这些对象?自动释放是否神奇地将责任传递给主线程自动释放池。
如果我自己创建线程而不是使用NSOperationQueue会不会有任何不同?
谢谢!
答案 0 :(得分:0)
NSOperation
需要为他们创建NSAutoReleasePool
。
-(void)main
{
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
//All NSOperation code here
[pool drain];
}