我想将一个对象从工作线程发送回主线程。但是,自动释放池是否在线程之间工作?以下代码有什么问题:
-(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];
}
似乎工作正常。但是,在主线程能够保留它之前,工作线程是否可能达到[pool release]
?
答案 0 :(得分:7)
您的代码不应该崩溃:performSelectorOnMainThread:
在选择器完成之前保留其参数,因此您的保留/释放对是多余的。
此方法保留接收器和arg参数,直到执行选择器之后。
另外:您应该[pool drain]
而不是[pool release]
。
答案 1 :(得分:0)
This可能会回答您的问题。
以下是他为解决问题所做的工作。该链接给出了解释。
- (void)runSomethingThatWillFail:(NSError **)error {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/BOGUS" error:error];
[*error retain];
[pool release];
[*error autorelease];
}