多线程和自动释放池在Cocoa中一起工作吗?

Ben*_*ves 6 cocoa multithreading objective-c

我想从工作线程发送一个对象回到主线程.但是,自动释放池是否在线程之间工作?以下代码有什么问题:

-(void)mainThreadReceiveResult:(id)response
{
  [response retain];
    /* Do some stuff with response */
  [response release];
}


-(void)workerThreadDoWork
{

 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

 response * response = [[[response alloc] init] autorelease];
 response->someData = [self getSomeData];

 [delegate performSelectorOnMainThread:@selector(receiveResult:) withObject:response waitUntilDone:NO];

 [pool release];    

}
Run Code Online (Sandbox Code Playgroud)

似乎工作正常.但是[pool release],在主线程能够保留之前,工作线程是否可以到达?

Jim*_*uls 7

您的代码不应该崩溃:performSelectorOnMainThread:在选择器完成之前保留其参数,因此您的保留/释放对是多余的.

查看文档:

此方法保留接收器和arg参数,直到执行选择器.

另外:你应该[pool drain]代替[pool release].