我有一個方法可以構建一個包,將它發送到一個Web服務,取回一個包,打開它並返回一個nsdictionary。如何在後臺隊列中調用它以在請求數據時顯示HUD?在後臺線程上解析來自WebService的JSON數據
2
A
回答
2
你可以卸下一個新的線程,就像以下
- (void) fetchData
{
//Show Hud
//Start thread
[NSThread detachNewThreadSelector:@selector(getDataThreaded)
toTarget:self
withObject:nil];
}
- (void) getDataThreaded
{
//Start Fetching data
//Hide hud from main UI thread
dispatch_async(dispatch_get_main_queue(), ^{
//Update UI if you have to
//Hide Hud
});
}
0
大中央調度(GCD)爲做什麼你問的大力支持。在運行使用GCD的背景是什麼很簡單:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_NORMAL, 0) ^{
NSDictionary* data = [self fetchAndParseData];
dispatch_async(dispatch_get_main_queue(), ^{
[self dataRetrieved:data];
});
});
該調用將立即返回(所以你的用戶界面將繼續響應),當數據準備好dataRetrieved
將被調用。
現在,根據fetchAndParse數據的工作原理,它可能需要更復雜。如果你使用NSURLConnection或類似的東西,你可能需要創建一個NSRunLoop來處理gcd線程中的數據回調。無論如何NSURLConnection大部分都是異步的(儘管像didReceiveData這樣的回調將通過UI線程進行路由),因此只有在檢索完所有數據後才能使用gcd來解析數據。這取決於你想要的異步程度。
0
除了以前的回覆,爲什麼不使用NSOperation
和NSOperationQueue
類?這些類是GCD下的抽象類,它們使用起來非常簡單。
我喜歡NSOperation
類,因爲它允許在我通常開發的應用程序中對代碼進行模塊化。
要設置NSOperation
你可以只繼承它像
//.h
@interface MyOperation : NSOperation
@end
//.m
@implementation MyOperation()
// override the main method to perform the operation in a different thread...
- (void)main
{
// long running operation here...
}
現在在主線程可以提供操作隊列類似如下:
MyOperation *op = [[MyOperation alloc] initWithDocument:[self document]];
[[self someQueue] addOperation:op];
附:您無法在NSOperation
的main
方法中啓動異步操作。 main
完成後,與該操作鏈接的代理將不會被調用。要說出你可以解釋的事實,但這涉及到處理運行循環或併發行爲。
這裏有一些關於如何使用它們的鏈接。
- http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/
- https://developer.apple.com/cocoa/managingconcurrency.html
明明class reference爲NSOperation
相關問題
- 1. 解析來自網站的JSON數據
- 2. 解析來自JSON的數據
- 3. 解析來自URL的JSON數據
- 4. 在後臺下載並解析數據線程
- 5. 在主線或後臺線程上解析iOS XML
- 6. iOS中的後臺線程解析
- 7. 解析來自JSON
- 8. 來自.net webservice的Android解析器XML數據使用KSOAP2
- 9. 來自後臺線程的'more'命令
- 10. Webservice無法解析來自PHP文件的JSON請求
- 11. 解析來自Pokeapi的JSON
- 12. 解析來自Xquery的json
- 13. 解析來自GoogleApiBooks的JSON
- 14. 在後臺線程上查找backgroundTimeRemaining在後臺線程上
- 15. 在WebService上下文中的後臺工作線程
- 16. 來自服務器的JSON數據無法解析 - 來自MySQL的數據
- 17. 解析JSON到核心數據在後臺
- 18. 消息來自後臺線程android
- 19. 如何在Python中解析來自API響應的json數據?
- 20. 解析JSON webservice結果android
- 21. HtmlEncode來自webservice的數據
- 22. 如何解析來自JSON
- 23. 在Swift中解析來自OpenWeatherMap的JSON
- 24. 主線程或後臺線程解析迅速
- 25. TextWriterTraceListener在後臺線程上
- 26. 解析JSON數組從webservice到android
- 27. 僞線程JSON解析?
- 28. jQuery autocomplate解析來自json對象的特定數據數組
- 29. 如何從FB圖API解析來自JSON數組的數據?
- 30. JSON解析:在UITableView上顯示數據
你有沒有看着ASIHTTPRequest或AFNetworking?他們使這個過程非常簡單。 – mkral