多線程是一個比較輕量級的方法來實現單個應用程序內多個代碼執行路徑。 在系統級別內,程序并排執行,系統分配到每個程序的執行時間是由該程序的所需時間和其他程序的所需時間來決定的。然而在每個應用程序內部,存在一個或多個執行線程,它同時或者在一個幾乎同時發生的方式里執行不同的任務。系統本身管理這些執行的線程,調度他們在可用的內核上運行,并在需要讓其他線程執行的時候搶先打斷它們。
多線程的優勢:
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的系統事件異步處理機制。