iOS多執行緒篇:NSThread
一、什麼是NSThread
NSThread是基於執行緒使用,輕量級的多執行緒程式設計方法(相對GCD和NSOperation),一個NSThread物件代表一個執行緒,需要手動管理執行緒的生命週期,處理執行緒同步等問題。
二、NSThread方法介紹
1)動態建立
1 |
NSThread * newThread = [[NSThread alloc]initWithTarget:self selector:@selector(threadRun) object:nil];
|
動態方法返回一個新的thread物件,需要呼叫start方法來啟動執行緒
2)靜態建立
1 |
[NSThread detachNewThreadSelector:@selector(threadRun) toTarget:self withObject:nil];
|
由於靜態方法沒有返回值,如果需要獲取新建立的thread,需要在selector中呼叫獲取當前執行緒的方法
3)執行緒開啟
1 |
[newThread start];
|
4)執行緒暫停
1 2 |
[NSThread sleepForTimeInterval:1.0]; (以暫停一秒為例) [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
|
NSThread的暫停會有阻塞當前執行緒的效果
5)執行緒取消
1 |
[newThread cancel];
|
取消執行緒並不會馬上停止並退出執行緒,僅僅只作(執行緒是否需要退出)狀態記錄
6)執行緒停止
1 |
[NSThread exit];
|
停止方法會立即終止除主執行緒以外所有執行緒(無論是否在執行任務)並退出,需要在掌控所有執行緒狀態的情況下呼叫此方法,否則可能會導致記憶體問題。
7)獲取當前執行緒
1 |
[NSThread currentThread];
|
8)獲取主執行緒
1 |
[NSThread mainThread];
|
9)執行緒優先順序設定
iOS 8以前使用
1 |
[NSThread setThreadPriority:1.0];
|
這個方法的優先順序的數值設定讓人困惑,因為你不知道你應該設定多大的值是比較合適的,因此在iOS8之後,threadPriority添加了一句註釋:To be deprecated; use qualityOfService below
意思就是iOS 8以後推薦使用qualityOfService屬性,通過量化的優先順序列舉值來設定
qualityOfService的列舉值如下:
-
NSQualityOfServiceUserInteractive:最高優先順序,用於使用者互動事件
-
NSQualityOfServiceUserInitiated:次高優先順序,用於使用者需要馬上執行的事件
-
NSQualityOfServiceDefault:預設優先順序,主執行緒和沒有設定優先順序的執行緒都預設為這個優先順序
-
NSQualityOfServiceUtility:普通優先順序,用於普通任務
-
NSQualityOfServiceBackground:最低優先順序,用於不重要的任務
比如給執行緒設定次高優先順序:
1 |
|