应用程序通过NSURLConnection的didReceiveData接收数据非常慢:

时间:2013-07-26 15:42:32

标签: ios nsurlconnection freeze lag

我的应用中遇到了一个我真的不明白的问题。 当用户想让他们喜欢的歌曲离线时,我可以在我的应用程序中下载一些歌曲。当使用NSURLConnection启动下载时(即使使用commonRunLoopMode),我的应用程序开始变得非常慢,我甚至无法滚动tableView而不会遇到冻结。

为什么像下载数据这样简单的事情会让用户体验如此糟糕?

1 个答案:

答案 0 :(得分:0)

听起来您在主线程上运行了下载代码。该线程应仅保留用于短任务和用户界面操作。这是因为用户界面正在此线程上运行,因此该线程上任何长时间运行的进程将基本上阻止用户界面。这是一个相当长的话题,但请阅读:

http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091

和此:

http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial

Grand Central Dispatch允许您将任何长时间运行的进程放到调度队列中,以便在后台线程上异步处理。