2013-07-26 15 views
0

我的應用程序中有一個問題,我真的不明白。 我有一些歌曲可以在我的應用程序中下載,當用戶想讓他們最喜歡的歌曲離線時可以下載。當下載與NSURLConnection(即使與commonRunLoopMode)一起啓動時,我的應用程序開始非常緩慢,我甚至無法滾動tableView而沒有經歷凍結。通過NSURLConnection的didReceiveData接收數據的應用程序非常慢:

爲什麼像下載數據這樣簡單的事情使用戶體驗如此糟糕?

+0

你正在下載數據異步還是你在主線程上執行它?如果您在主線程中執行此操作,您的用戶界面將無法響應。 – JeffRegan

+0

如果您將代碼設置爲NSURLConnection,將會更容易,因爲如果您使用的是第一個,那麼您的應用程序遇到凍結的原因可能是同步或異步。 – Moy

+0

我以爲NSURLConnection只能在主線程中使用。這是真的嗎? – Matthias

回答

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

中央大調度將讓你把任何長時間運行的進程到調度隊列在後臺線程上異步處理。

相關問題