我們花費了六節時間詳細的探究了iOS中多線程的實現方式。由于時間總是零碎的,每天學習一點點,多線程這部分內容,也差不多花費了差不多一個月的時間了,真是不算不知道,一算嚇一跳。本節中,我們將對之前內容進行一次總結。
相關鏈接:
多線程的其他方式補充功:其他方式
pThread鏈接:iOS詳解多線程(實現篇——pThread)
NSOpreation鏈接:iOS詳解多線程(實現篇——NSOperation)
GCD鏈接:iOS詳解多線程(實現篇——GCD)
NSThread鏈接:詳解多線程(實現篇——NSThread)
多線程概念篇鏈接:詳解多線程(概念篇——進程、線程以及多線程原理)
源碼鏈接:https://github.com/weiman152/Multithreading.git
1.思維導圖總結
(1)相關概念
(注:如果看不清,請放大圖片)
(2)多線程的優缺點
(3)NSThread
(4)GCD
GCD內容較多,我們先看個整體圖:
看不太清啊,我們分別解出來,就能看清了。
(5)NSOperation
NSOperation也是蘋果官方提供的面向對象的OC語言編寫的解決多線程的方式。
先看個整體圖吧。
看不清沒關系,我們就是看個大概位置,下面我們分別把圖片截圖出來,就能看清了。
1》NSOperation是什么?
2》創建多線程
3》其他重要函數
(6)pThread
2.幾個問題
1> 關于NSThread生命周期
網上很多人說NSThread是程序員管理生命周期的多線程方法,但是,我使用NSThread創建了子線程,我沒有手動銷毀他,它在執行完之后,也是自己銷毀了,沒有發生內存泄露,所在的VC也可以正常的dealloc,并不需要我做什么啊,為什么說是程序員管理呢?
難道說是因為我使用ARC的緣故?但是,ARC是對所有的代碼一視同仁,都是自動管理的,為何還有人偏偏說NSThread需要程序員管理生命周期?不明白,我只能認為是MRC遺留的說法,沒有改過來吧。
2> NSOperation比GCD推出更早,為何說是對GCD的封裝
我們知道,NSOperation是在iOS 2.0的時候推出的,實現多線程的方式;而GCD是在iOS 4.0推出的實現多線程的方式。GCD推出的更晚一些,為什么說NSOperation是對GCD的封裝呢?
我們知道,NSThread創建單個線程非常方便,但是管理多個線程并不方便,這個時候,蘋果在2.0推出了NSOperation,也是Cocoa框架下的OC的類。在iOS4.0的時候又推出了GCD,GCD是C語言的,更加的快速高效,且有很多種組合自由使用。蘋果在推出GCD的時候,就把NSOperation底層實現更改了,改成了GCD的實現方式,所以說,NSOperation雖然比GCD推出的早,但是,現在的NSOperation仍然是對GCD的封裝。
以上是我的個人理解,如有偏差,請指正。
3> 為什么蘋果會推出這么多的實現多線程的方式呢?
通過上面的總結我們發現,在iOS中,實現多線程的方式常用的有三種,不常用的也有一種。那么,蘋果為何會推出這么多種實現方式呢?
我個人認為,官方推出輕量級面向對象的NSThread,能夠快速的創建多線程。但是呢,當有多個線程需要管理的時候,例如實現資源共享等問題的時候,會比較麻煩。而后,在iOS2.0的時候,推出NSOperation,NSOperation能夠實現更加復雜的多線程。再后來,iOS4.0的時候,推出更加底層的GCD。GCD能夠實現更加復雜的多線程情況。GCD是C語言的,不在Cocoa框架內。這個時候,NSOperation的底層封裝改成了GCD。
以上只是個人意見,如有錯漏請不吝賜教。
祝大家生活愉快。