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

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實現。


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



3 iOS多線程常見面試題
在項目什麼時候選擇使用GCD,什麼時候選擇NSOperation?
項目中使用NSOperation的優點是NSOperation是對線程的高度抽象,在項目中使用它,會使項目的程序結構更好,子類化NSOperation的設計思路,是具有面向對象的優點(複用、封裝),使得實現是多線程支持,而接口簡單,建議在複雜項目中使用。
項目中使用GCD的優點是GCD本身非常簡單、易用,對於不復雜的多線程操作,會節省代碼量,而Block參數的使用,會是代碼更爲易讀,建議在簡單項目中使用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章