NSTread是iOS中進行多線程開發的一個類,其結構邏輯清晰,使用十分方便,但其封裝度和性能不高,線程週期,加鎖等須要手動處理。編程
獲取當前線程多線程
+ (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;
初始化方法,選擇器能夠帶一個參數
- (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;
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