我想在後臺運行一個進程來生成一個字符串,然後在主線程中使用(發送到遠程服務器)。代碼在模擬器中工作正常,並且該字符串按預期記錄了兩次。大中央調度 - 線程之間傳遞數據
在設備(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