IOS開發 數據讀取後,畫面(UI)沒有馬上更新

 

最近嘗試了異步讀取data的方法,玩PHP的時候就有接觸過AJAX,所以不算陌生。如果你要同時加載數據和Push一個UIViewController,如果數據很大,那就會UI卡死不能動,讀取完畢以後才會push。

為了不卡死,我想到2個方案。

1、將push和數據讀取分開,先push,讓用戶看到畫面,然後再加載,但這個時候也會進入卡死等待數據加載?
2、異步加載,就是開進程去獲取數據。

而在我對線程的理解還只是在於,「多開線程就是同時處理幾件事情」而已的時候,就出問題了。

出問題時的設定:
1、push完UIViewController以後開線程異步抓去數據,抓到以後回調函數,然後把UILabel、UIImageView之類的都放上數據

2、結果,我在回調函數中放入NSLog來看數據有沒有到,都有輸出,確實到了,但是UI的部分怎麼都沒變?

答案來了…..

1、UI是主線程在處理的,所以我設定開線程抓數據、再去回調數據,這個過程都不是在主線程處理的,所以雖然數據有了,但是UI是不會變的。
2、但為甚麼過了一會UI還是會變了?
3、網上查到資料,如果碰到明明創建子線程卻也改變了UI,網上的解釋是「子線程結束後回到主線程了,所以就改變了」。

使用主線程來執行函數的方法:

loadImage2是我定義的函數。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *