在我的iPhone應用程序中,我使用了dispatch_async
塊沒有問題。該應用程序檢查價格更新網站,解析HTML
,相應地更新核心數據模型,然後刷新正在查看的表。iPhone應用程序與dispatch_async崩潰如果操作未完成
但是,在我最新的應用程序中,我發現我可以通過在價格更新過程運行時切換出應用程序來使應用程序崩潰。第一次和第二次使用之間的差異似乎只是我從表refreshController
(即tableViewController
現在內置的「拉到再刷新」機制)調用調度塊,而現在是iOS7。
任何人都可以向我推薦dispatch_async
應該如何在已知條件下正常中止,例如用戶希望停止進程,或者如果他們切換這樣的應用程序,我想攔截該活動以正確管理該塊, 請?
如果有任何有關塊和塊的好的背景知識,我會很高興看到這樣的鏈接 - 謝謝!
這是我使用(大部分樣板)dispatch_async代碼,爲了您的方便:
priceData = [[NSMutableData alloc]init]; // priceData is declared in the header
priceURL = … // the price update URL
NSURL *requestedPriceURL = [[NSURL alloc]initWithString:[@「myPriceURL.com」]];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:requestedPriceURL];
dispatch_queue_t dispatchQueue = dispatch_queue_create("net.fudoshindesign.loot.priceUpdateDispatchQueue", NULL); //ie. my made-up queue name
dispatch_async(dispatchQueue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:urlRequest delegate:self startImmediately:YES];
[conn start];
})
});
只知道,是可以安全使用的'self',而不是'的UIViewController __weak weakSelf = self'在'dispatch_async'? –
是的,在異步塊中使用self是安全的..但是你不能在後臺線程塊中更新UI。 –
好的謝謝。很高興知道 –