2014-02-11 26 views
0

一旦這條線發生,我不能再使用標籤控制器,而我正在測試的手機變得非常滯後。[NSString stringWithContentsOfURL:url]後Tab控制器凍結,手機變慢;

NSString *webData= [NSString stringWithContentsOfURL:url]; 

任何想法爲什麼會發生?

網址是:

NSURL *url = [NSURL URLWithString:str]; 
+0

我會說你可能正在加載一個非常大的字符串。 –

+0

嗯,它是我們頁面的源代碼HTML ... – Inbl

+0

我可以看到這會導致一些滯後,但爲什麼它會阻止我的標籤欄工作? – Inbl

回答

1

問題是stringWithContentsOfURL:是阻塞呼叫。如果你打算使用這種方法,你應該在後臺線程中調用它。當您在主線程上調用它時,在完成下載字符串之前,您將無法與您的應用程序進行交互。

基本上,當您撥打stringWithContentsOfURL:時,被調用的線程將無法執行任何操作,直到調用完成。如果您從UI線程調用它,這意味着您的應用程序將無法響應,例如,觸摸事件。如果你把它放在後臺線程上,或者添加更復雜的非阻塞網絡,你就不會有這個問題。

從iOS 7起也不推薦使用它;建議您改用stringWithContentsOfURL:encoding:error:

+0

謝謝!這一個現在標記爲正確。 – Inbl

0

的問題是,我經常拉着一個小的HTML,這是使事情凍結和滯後。

我在它周圍包裹了一些條件,所以它只在我真正需要的時候拉取HTML,並且所有東西都恢復了。