iOS多線程編程之一——NSThread線程管理

iOS多線程編程之一——NSThread線程管理

NSTread是iOS中進行多線程開發的一個類,其結構邏輯清晰,使用十分方便,但其封裝度和性能不高,線程週期,加鎖等須要手動處理。編程

1、NSThread類方法總結

獲取當前線程多線程

+ (NSThread *)currentThread;

 

這個方法經過開啓一個新的線程執行選擇器方法異步

+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;

線程用法示例以下:函數

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [NSThread detachNewThreadSelector:@selector(log) toTarget:self withObject:nil];
    for (int i=0; i<100; i++) {
        NSLog(@"%@=%d",[NSThread currentThread],i);
    }
}
-(void)log{
    for (int i=0; i<100; i++) {
        NSLog(@"%@=%d",[NSThread currentThread],i);
    }
}

運行後的打印信息:性能

能夠清晰的看出來,新啓的線程和主線程是異步的。spa

 

程序是不是多線程執行線程

+ (BOOL)isMultiThreaded;

 

線程字典,咱們能夠爲特殊的線程設置鍵值對code

@property (readonly, retain) NSMutableDictionary *threadDictionary;

 

線程在某個時間執行orm

+ (void)sleepUntilDate:(NSDate *)date;

 

線程在等待一個時間間隔後執行開發

+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

 

結束線程

+ (void)exit;

 

設置線程的優先級,取值的範圍爲0-1,1的優先級最高

+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;

 

這個屬性是iOS8以後的新特性,將優先級更人性化的封裝了起來

@property NSQualityOfService qualityOfService;

NSQualityOfService的枚舉以下:

typedef NS_ENUM(NSInteger, NSQualityOfService) {
    //刷新UI級別的線程
    NSQualityOfServiceUserInteractive = 0x21,
    //用戶請求的無需精確的任務的線程,例如點擊加載郵件
    NSQualityOfServiceUserInitiated = 0x19,
    //週期性的任務線程,例如定時刷新
    NSQualityOfServiceUtility = 0x11,
    //後臺任務的線程
    NSQualityOfServiceBackground = 0x09,
    //優先級未知的線程,優先級介於UserInteractive和Utility之間
    NSQualityOfServiceDefault = -1
};

 

判斷是不是主線程

+ (BOOL)isMainThread;

 

獲取主線程

+ (NSThread *)mainThread;

 

2、屬性與成員方法總結

初始化方法,選擇器能夠帶一個參數

- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;

 

線程是否正在執行

@property (readonly, getter=isExecuting) BOOL executing;

 

線程是否已經執行結束

@property (readonly, getter=isFinished) BOOL finished;

 

線程是否已經取消執行

@property (readonly, getter=isCancelled) BOOL cancelled;

 

3、隱式的經過NSThread進行多線程編程

NSObject的一個類別中提供了支持多線程的方法,以下:

 

這個函數指定在主線程執行一個選擇器,arg是參數,wait是是否當即執行,若是YES,則會阻塞當前主線程的任務,NO則會等待當前任務結束後執行。

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

 

這個函數指定在某個線程執行選擇器

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

 

指定在後臺線程中執行選擇器

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg;

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索