我正在尝试在后台运行一个进程以生成一个字符串,然后在主线程中使用该字符串(发送到远程服务器)。代码在模拟器中运行良好,并且字符串按预期记录了两次。
在设备(iPad、4.2 和各种 iPhone)上,每次使用 EXC_BAD_ACCESS 都会崩溃。似乎 myString 超出了范围,但这似乎与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(), ^{}); 堵塞。
希望这会对其他人有所帮助。