iOS多線程

  • 多線程是一個比較輕量級的方法來實現單個應用程序內多個代碼執行路徑。 在系統級別內,程序并排執行,系統分配到每個程序的執行時間是由該程序的所需時間和其他程序的所需時間來決定的。然而在每個應用程序內部,存在一個或多個執行線程,它同時或者在一個幾乎同時發生的方式里執行不同的任務。系統本身管理這些執行的線程,調度他們在可用的內核上運行,并在需要讓其他線程執行的時候搶先打斷它們。
    多線程的優勢:
    1、多個線程可以提高應用程序的感知響應。
    2、多個線程可以提高應用程序在多核系統上得實時性能。

  • iOS中的多線程主要有三種實現方法:NSThread 、 NSOperation 和GCD
    三者各有優缺點,但在實際開發中,iOS也極力推崇使用GCD多線程方式。

1、NSOperation** 和 **NSOperationQueue
使用**NSOperation**的最簡單的方法就是將其放入**NSOperationQueue**中。只要一個操作被加入到隊列中,該隊列就會啟動并開始處理它。一旦操作完成,隊列就會釋放它。
因為**NSOperation**本身是一個抽象類,不能直接使用類的方法構建對象,需要通過其之類的方法來實現 
可以使用**NSInvokeOperation**通過指定的selector和target來實現操作
可以使用**NSBlockedOperation**通過Block來實現操作。
2、NSThread

相對于另外兩種多線程技術,NSThread的優點是輕量級,缺點是需要自己管理線程的生命周期和線程同步。而且線程同步對數據的加鎖會有一定的系統開銷。
NSThread創建與啟動主要由兩種方式:

    //直接初始化
    NSThread *thread = [[NSThread alloc] init];
    //利用行為初始化
    NSThread *thread = [NSThread alloc] initWithTarget:(id) selector:(SEL) object:(id)argument;

要進行啟動線程
-(void)start;

第二種利用行為初始化參數的具體說明:
selector :線程執行的方法,這個selector只能有一個參數,而且不能有返回值
target:selector消息發送對象
argument:傳輸給target的唯一參數,也可以是nil

3、最后說說GCD

GCD(Grand Central Dispatch)是一個大的主題,可以提高代碼的執行效率與多核的利用率。包含了語言特性、runtime libraries 以及提供系統級及綜合提高的系統增強功能。
GCD就是系統幫用戶管理線程,而不需要在編寫線程代碼。程序員只需要專心編寫執行某項功能的代碼,添加到block或方法函數中。 有以下兩種方法處理block或方法:
1)直接將block加入到dispatch queues (隊列)中
2)講Dispatch source 封裝為一個特定類型的系統事件,的系統事件發生時提交一個特定的block對象或函數到dispatch queue ,然后,dispatch queue按先進先出的順序,串行或并發執行任務。

這里的dispatch queue 是一個基于C的執行自定義任務機制,而 dispatch source 是基于C的系統事件異步處理機制。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • iOS多線程編程 基本知識 1. 進程(process) 進程是指在系統中正在運行的一個應用程序,就是一段程序的執...
    陵無山閱讀 6,120評論 1 14
  • 主隊列 細心的同學就會發現,每套多線程方案都會有一個主線程(當然啦,說的是iOS中,像 pthread 這種多系統...
    京北磊哥閱讀 385評論 0 1
  • 前言: 最近想回顧一下多線程問題,看到一篇文章寫的非常詳細,為了便于以后查找以及加深印象,就照著原文摘錄了下文,原...
    FM_0138閱讀 996評論 1 1
  • 《漁家傲·荷葉初開猶半卷》 年代:宋 作者: 晏殊 荷葉初開猶半卷。荷花欲拆猶微綻。此葉此花真可羨。秋水畔。青涼傘...
    雨_蓮閱讀 971評論 0 0
  • 中國人民大學,是我曾經最喜歡的僅次于北大的那所大學,高中那幾年,曾無數次的幻想過自己在這個校園里生活,然而,或許是...
    歌詠今天閱讀 676評論 0 0