我开始使用异步,但获取返回的数据变成了一个麻烦。然后我开始使用类方法,我相信它排除了使用委托方法的可能性。所以我保持同步,知道这将是一个问题,但不认为我会遇到这样一个解决方案很难。在保持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. 同步线程上的NullPointerException
- 5. https上的NSURLConnection同步请求
- 6. 是否可以从另一个线程取消同步的NSURLConnection?
- 7. iphone取消异步NSURLConnection
- 8. iPhone应用程序中的异步与同步与线程
- 9. 线程/同步
- 10. 线程同步
- 11. 线程同步
- 12. 线程同步
- 13. 线程同步
- 14. 线程同步
- 15. 线程同步
- 16. 线程同步
- 17. 超时与同步NSURLConnection
- 18. 同步线程中的同步问题
- 19. 同步块上的Java线程锁
- 20. 多线程 - Unix上的同步
- 21. NSURLConnection线程问题
- 22. 多线程同步
- 23. 线程和同步
- 24. Java同步线程
- 25. 线程和同步
- 26. 线程同步:C
- 27. 线程vs同步
- 28. Boost线程同步
- 29. 线程:同步块
- 30. 跨线程同步
我可能会错误地做后台线程,因为它似乎并没有工作(不正确地做事的一个很好的迹象)。 我可能对“正确的方式”有错误的想法。一旦收到一些数据,它将用于另一种方法的调用。委托方法对此没有帮助。 – woody993 2009-12-23 22:45:35
当你得到你的第一个连接:didReceiveData时,你应该创建一个NSData对象,然后向它添加额外的数据。 – 2009-12-23 23:27:52
@Ben我正在使用类方法,我的理解是,一个NSData对象是不可用的那种方式 – woody993 2009-12-24 04:44:13