iOS開發(fā)之_多線程

一 單線程概述
每個正在運行的程序(即進(jìn)程)至少包含一個線程,這個線程是主線程.
主線程在程序啟動時被創(chuàng)建,用于執(zhí)行main函數(shù).
只有一個主線程的程序被稱為單線程程序.主線程負(fù)責(zé)執(zhí)行程序所有的代碼(UI刷新,網(wǎng)絡(luò)請求,數(shù)據(jù)加載),這些代碼只能順序執(zhí)行,不能并發(fā)執(zhí)行.

二 多線程概述
擁有多個線程的程序被稱為多線程程序.
iOS允許用戶自己開辟線程,相對于主線程而言,這些線程被稱為子線程.
子線程與主線程都是獨立運行的單元,相互不影響,所以可以并發(fā)執(zhí)行.

三 單線程&多線程區(qū)別
單線程程序只有一個線程,所以代碼順序執(zhí)行,容易出現(xiàn)代碼阻塞(頁面假死)等狀態(tài).
多線程程序各個線程獨立執(zhí)行,能有效避免代碼阻塞,并提高程序運行性能.
注意:UI添加和刷新必須在主線程執(zhí)行.

在 iOS 中其實目前有 4 套多線程方案,他們分別是:
<pre>

fourmethod.png

</pre>

<pre>

  1. Pthread
    是這四套線程中最垃圾的一套方法,我們也可以直接忽略它,在我們開發(fā)中根本就遇不到。簡單地說,這是一套在很多操作系統(tǒng)上都通用的多線程API,所以移植性很強(然并卵),當(dāng)然在 iOS 中也是可以的。不過這是基于c語言的框架.

  2. NSThread
    這套方案是經(jīng)過蘋果封裝后的,并且完全面向?qū)ο蟮?。所以你可以直接操控線程對象,非常直觀和方便。但是,它的生命周期還是需要我們手動管理,所以這套方案也是偶爾用用,比如 [NSThread currentThread],它可以獲取當(dāng)前線程類,你就可以知道當(dāng)前線程的各種屬性,用于調(diào)試十分方便。

  3. GCD
    全稱是Grand Central Dispatch,實際在我們開發(fā)過程中用到多線程中用到最多的是GCD了,它是蘋果為多核的并行運算提出的解決方案,所以會自動合理地利用更多的CPU內(nèi)核(比如雙核、四核),最重要的是它會自動管理線程的生命周期(創(chuàng)建線程、調(diào)度任務(wù)、銷毀線程),完全不需要我們管理,我們只需要告訴干什么就行。同時它使用的也是 c語言,不過由于使用了 Block(Swift里叫做閉包),使得使用起來更加方便,而且靈活。

  4. NSOperation和NSOperationQueue
    NSOperation 是蘋果公司對 GCD 的封裝,完全面向?qū)ο螅允褂闷饋砀美斫狻?大家可以看到 NSOperation 和 NSOperationQueue 分別對應(yīng) GCD 的 任務(wù) 和 隊列 。操作步驟也很好理解:
    將要執(zhí)行的任務(wù)封裝到一個 NSOperation 對象中。
    將此任務(wù)添加到一個 NSOperationQueue 對象中。
    然后系統(tǒng)就會自動在執(zhí)行任務(wù)。至于同步還是異步、串行還是并行請繼續(xù)往下看:
    </pre>
    好處:
    1、使用線程可以把程序中占據(jù)時間長的任務(wù)放到后臺去處理,如圖片、視頻的下載
    2、發(fā)揮多核處理器的優(yōu)勢,并發(fā)執(zhí)行讓系統(tǒng)運行的更快、更流暢,用戶體驗更好
    缺點:
    1、大量的線程降低代碼的可讀性,
    2、更多的線程需要更多的內(nèi)存空間
    3、當(dāng)多個線程對同一個資源出現(xiàn)爭奪的時候要注意線程安全的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評論 25 709
  • Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時執(zhí)行代碼、方法又是什么? 1...
    AlanGe閱讀 1,914評論 0 17
  • 多線程 在iOS開發(fā)中為提高程序的運行效率會將比較耗時的操作放在子線程中執(zhí)行,iOS系統(tǒng)進(jìn)程默認(rèn)啟動一個主線程,用...
    郭豪豪閱讀 2,719評論 0 4
  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個最簡單的問題,以這個作為切入點好了 在ma...
    Mr_Baymax閱讀 2,910評論 1 17
  • PDF(可移植文檔格式)是目前較為通用的一種文檔分享格式。該文件類型允許圖形數(shù)據(jù)如字體、圖像和原有格式扁平化進(jìn)行分...
    概念畫板閱讀 6,487評論 0 2

友情鏈接更多精彩內(nèi)容