我想在后台运行一个进程来生成一个字符串,然后在主线程中使用(发送到远程服务器)。代码在模拟器中工作正常,并且该字符串按预期记录了两次。大中央调度 - 线程之间传递数据
在设备(iPad,4.2和各种iPhone)上,每次使用EXC_BAD_ACCESS都会崩溃。看起来myString超出了范围,但是这似乎违背了使用相同原理的示例on Wikipedia。
的代码如下:
dispatch_async(_queue, ^{
NSString *myString = [self generateString];
NSLog(@"1 String is %@", myString);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"2 String is %@", myString);
});
});
有谁知道为什么会崩溃,并解决它的最好方法?
我犯了一个错误,简化我的代码以保持我的问题清晰。
在主队列中,我实际上会用另一个呼叫自我发送消息,这会导致访问不良。
解决方案是在我的异步队列中调用方法,并在方法内部将代码包装在dispatch_async(dispatch_get_main_queue(),^ {});块。
希望这会帮助别人。
您的编辑指示听起来像是您修复了症状,而不是问题。块将始终保留复制时引用的所有对象,包括“self”。 – bbum 2010-11-07 21:26:45