1. 程式人生 > >ios-多執行緒技術在開發中的應用場景

ios-多執行緒技術在開發中的應用場景

我們可能學習了多執行緒之後,覺得幾乎都用不到多執行緒,因為如果用第三方框架,都已經給我們封裝好了。這裡舉兩個例子,用到多執行緒的概念的。

如果我們自定義了一個collectionView之後,在初始化方法中想要呼叫下面這個方法

   self.collectionView.scrollToItem(at: indexPath, at: .left, animated: false)

是不可能的,因為那個時候還沒有資料,是到不了我們希望的指定的資料但是我們這個時候就可以用到多執行緒的知識了。因為主佇列中非同步執行其實就是主執行緒順序的執行,不過需要的是把主執行緒上的任務都先完成,再去執行主隊列當中的任務。
 DispatchQueue.main.async {
            
            //當把UI介面設定完成,主執行緒上的任務都完成,訊息迴圈快要結束的時候呼叫下面這個,滾動到相應的位置
            self.collectionView.scrollToItem(at: indexPath, at: .left, animated: false)
        }
還有種方式也差不多,就是我們在初始化方法中想去監聽某個屬性的變化,但是那個屬性在初始化的時候可能會發生變化,如果我們不想這麼早去監聽,我們也可以呼叫下面這個方法來實現,使用KVO監聽位置的變化,把任務新增到主佇列中,如果主執行緒中有任務,就不排程佇列中的任務執行,這裡就是讓當前執行迴圈中的程式碼都執行完成之後,在執行迴圈結束之前監聽這個frame的改變
 DispatchQueue.main.async {
             self.addObserver(self, forKeyPath: "frame", options: [], context: nil)
        }