UIKit不是線程安全的苫幢,假如在兩個線程中設(shè)置了同一張背景圖片歇僧,很有可能就會由于背景圖片被釋放兩次图张,使得程序崩潰≌┖罚或者某一個線程中遍歷找尋某個subView埂淮,然而在另一個線程中刪除了該subView,那么就會造成錯亂写隶。
UI操作涉及到渲染訪問各種View對象的屬性,如果是異步操作會有讀寫問題讲仰。加鎖呢慕趴,性能損耗大。所以主線程操作UI。
子線程是否可以更新UI
1.事實上在子線程中如果要對其他UI 進行更新冕房,必須等到該子線程運行結(jié)束躏啰。因為子線程代碼執(zhí)行完畢了,又自動進入到了主線程耙册。執(zhí)行了子線程中的UI更新的函數(shù)棧给僵,這中間的時間非常的短,就讓大家誤以為分線程可以更新UI详拙。如果子線程一直在運行帝际,則子線程中的UI更新的函數(shù)棧主線程無法獲知,即無法更新
2.只有極少數(shù)的UI能饶辙,因為開辟線程時會獲取當前環(huán)境蹲诀,如點擊某個按鈕,這個按鈕響應的方法是開辟一個子線程弃揽,在子線程中對該按鈕進行UI更新是能及時的脯爪。