我開始使用異步,但獲取返回的數據變成了一個麻煩。然後我開始使用類方法,我相信它排除了使用委託方法的可能性。所以我保持同步,知道這將是一個問題,但不認爲我會遇到這樣一個解決方案很難。在保持UI可交互的情況下檢索數據的最佳方式是什麼?iPhone上的同步NSURLConnection線程
1
A
回答
2
同步NSURLConnections在NSOperation內部工作得很好 - 因爲你正在同步使用它們,NSOperationQueue交給NSOperations會自動使用後臺線程來運行它們(否則你必須做額外的工作)。
讓URL連接在後臺線程中運行是保持UI響應的關鍵,這是異步NSURLOperation默認不會執行的操作(查看數據回調所在的線程)。
有時你想處理數據傳入(就像你有進度條一樣),在這種情況下異步URL連接更好,它們仍然可以在NSOperation中。因爲這讓你感到沮喪,所以你可能想看一下另一種基於NSOperation的ASIHTTPRequest庫,但它似乎可能會讓你感覺不那麼痛苦(它們有很好的示例代碼):
2
NSURLConnection同步調用應該能夠卡在後臺線程中,但我強烈建議您處理'麻煩',並做到正確的方式。在保持UI交互的同時檢索數據的最佳方式是使用NSURLConnection的異步方法。
1
出於興趣您在獲取數據時遇到了哪些問題?我發現使用異步NSURLConnection和NSNotificaion時,它已經完成是一個相當方便的解決方案。
在你需要數據的類(我通常把它放在init方法)
-(id)init{
... object setup ...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView) name:@"ScanCompleted" object:nil];
}
的UpdateView是當連接已完成接收數據
在NSURLConnection的要調用的方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
//Notify that we are finished
[[NSNotificationCenter defaultCenter] postNotificationName:soapAction object:self];
}
這對我很好用 - NSURLConnection是線程化的,因此UI不會鎖定,並在數據完成時得到更新downloadi NG。
相關問題
- 1. NSOperation,同步NSURLConnection和iPhone上的UIWebView
- 2. iphone線程同步
- 3. NSURLConnection委託和線程 - iPhone
- 4. 來自線程與異步請求的NSURLConnection同步請求
- 5. 同步線程上的NullPointerException
- 6. iphone取消異步NSURLConnection
- 7. https上的NSURLConnection同步請求
- 8. 同步NSURLConnection回調
- 9. 是否可以從另一個線程取消同步的NSURLConnection?
- 10. iPhone應用程序中的異步與同步與線程
- 11. 同步與異步iPhone上iPhone
- 12. 線程同步
- 13. 線程同步
- 14. 線程同步
- 15. 線程同步
- 16. 線程/同步
- 17. 線程同步
- 18. 同步線程
- 19. 線程同步
- 20. 線程同步
- 21. 多線程,線程同步
- 22. 超時與同步NSURLConnection
- 23. 線程同步VS進程同步
- 24. 同步線程中的同步問題
- 25. 多線程 - Unix上的同步
- 26. 方法上的Java線程同步
- 27. 同步塊上的Java線程鎖
- 28. 十字路口上的線程同步
- 29. 單獨線程上的同步HttpPost
- 30. ByDefault NSURLConnection是同步還是異步
我可能會錯誤地做後臺線程,因爲它似乎並沒有工作(不正確地做事的一個很好的跡象)。 我可能對「正確的方式」有錯誤的想法。一旦收到一些數據,它將用於另一種方法的調用。委託方法對此沒有幫助。 – woody993 2009-12-23 22:45:35
當你得到你的第一個連接:didReceiveData時,你應該創建一個NSData對象,然後向它添加額外的數據。 – 2009-12-23 23:27:52
@Ben我正在使用類方法,我的理解是,一個NSData對象是不可用的那種方式 – woody993 2009-12-24 04:44:13