天天看點

iOS進階面試題----多線程

iOS面試題系列:

iOS如何面試

iOS面試題(一)

iOS基礎面試題(二)

iOS基礎面試題(三)

iOS基礎面試題(四)

iOS進階面試題----Block部分

1 多線程是什麼  多線程是個複雜的概念,按字面意思是同步完成多項任務,提高了資源的使用效率,從硬體、作業系統、應用軟體不同的角度去看,多線程被賦予不同的内涵,對于硬體,現在市面上多數的CPU都是多核的,多核的CPU運算多線程更為出色;從作業系統角度,是多任務,現在用的主流作業系統都是多任務的,可以一邊聽歌、一邊寫部落格;對于應用來說,多線程可以讓應用有更快的回應,可以在網絡下載下傳時,同時響應使用者的觸摸操作。在iOS應用中,對多線程最初的了解,就是并發,它的含義是原來先做燒水,再摘菜,再炒菜的工作,會變成燒水的同時去摘菜,最後去炒菜。

2 iOS 中的多線程

iOS中的多線程,是Cocoa架構下的多線程,通過Cocoa的封裝,可以讓我們更為友善的使用線程,做過C++的同學可能會對線程有更多的了解,比如線程的創立,信号量、共享變量有認識,Cocoa架構下會友善很多,它對線程做了封裝,有些封裝,可以讓我們建立的對象,本身便擁有線程,也就是線程的對象化抽象,進而減少我們的工程,提供程式的健壯性。

GCD是(Grand Central Dispatch)的縮寫 ,從系統級别提供的一個易用地多線程類庫,具有運作時的特點,能充分利用多核心硬體。GCD的API接口為C語言的函數,函數參數中多數有Block, 關于Block的使用參看這裡,為我們提供強大的“接口”, 對于GCD的使用參見本文

NSOperation與Queue NSOperation是一個抽象類,它封裝了線程的細節實作,我們可以通過子類化該對象,加上NSQueue來同面向對象的思維,管理多線程程式。具體可參看這裡: 一個基于NSOperation的多線程網絡通路的項目。     NSThread NSThread是一個控制線程執行的對象,它不如NSOperation抽象,通過它我們可以友善的得到一個線程,并控制它。但NSThread的線程之間的并發控制,是需要我們自己來控制的,可以通過NSCondition實作。 參看  

iOS多線程程式設計之NSThread的使用

其他多線程 在Cocoa的架構下,通知、Timer和異步函數等都有使用多線程,(待補充).

3 iOS多線程常見面試題 在項目什麼時候選擇使用GCD,什麼時候選擇NSOperation? 項目中使用NSOperation的優點是NSOperation是對線程的高度抽象,在項目中使用它,會使項目的程式結構更好,子類化NSOperation的設計思路,是具有面向對象的優點(複用、封裝),使得實作是多線程支援,而接口簡單,建議在複雜項目中使用。 項目中使用GCD的優點是GCD本身非常簡單、易用,對于不複雜的多線程操作,會節省代碼量,而Block參數的使用,會是代碼更為易讀,建議在簡單項目中使用。