iOS之[多線程:NSThread]

1.線程的三種狀態

isExecuting:正在執行->只讀
isFinished :執行完了->只讀
isCancelled:已經取消->能夠手動干預,調用cancel()方法
    - 只是設置線程狀態,並非真正的中止當前線程

2.建立新線程

將操做添加到線程中並直接啓動spa

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

建立一個線程對象,而後調用start方法啓動線程.net

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

3.線程控制

3.1啓動線程
-(void)start;
3.2取消線程,能夠在線程外部使用
-(void)cancel;

######3.3結束當前線程,寫在線程內部線程

能夠結合cancel方法進行exitcode

+(void)exit;
3.4睡眠
+ (void)sleepUntilDate:(NSDate *)date; //>>>睡眠到某個日時後,取消睡眠
+ (void)sleepForTimeInterval:(NSTimeInterval)ti; //>>>睡眠多長時間

4.線程優先級:threadPriority

線程優先級範圍:0-1orm

每一個線程默認優先級爲0.5對象

優先級越大,只能說明被執行的概率越大,可是執行順序仍是隨機的blog

+ (BOOL)setThreadPriority:(double)p;

5.擴展--NSObject分類擴展方法->NSObject (NSThreadPerformAdditions)

  • 在後臺執行一個操做,本質就是從新建立一個線程執行當前方法
- (void)performSelectorInBackground:(SEL)aSelector 
                         withObject:(id)arg;
  • 在指定的某個線程上執行一個方法
- (void)performSelector:(SEL)aSelector 
               onThread:(NSThread *)thr 
             withObject:(id)arg 
          waitUntilDone:(BOOL)wait
                //modes:(NSArray<NSString *> *)array;
  • 在主線程上執行一個方法
- (void)performSelectorOnMainThread:(SEL)aSelector 
                         withObject:(id)arg 
                      waitUntilDone:(BOOL)wait 
                            //modes:(NSArray<NSString *> *)array;

===================================================get

其它線程方式:it

NSOperation http://my.oschina.net/u/2462423/blog/534277io

GCD:Dispatch http://my.oschina.net/u/2462423/blog/534159

相關文章
相關標籤/搜索