創建並啟動 先創建線程,再啟動 // 創建 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:nil]; // 啟動 [thread start]; 創建並啟動 [NSTh ...
創建並啟動
先創建線程,再啟動
// 創建
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:nil];
// 啟動
[thread start];
創建並啟動
[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:nil];
隱式創建並啟動
[self performSelectorInBackground:@selector(run:) withObject:@"mj"];
其他方法
在指定線程上執行操作
[self performSelector:@selector(run) onThread:thread withObject:nil waitUntilDone:YES];
上面代碼的意思是在thread這條線程上調用self的run方法
最後的YES代表:上面的代碼會阻塞,等run方法在thread線程執行完畢後,上面的代碼才會通過
在主線程上執行操作
[self performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];
在當前線程執行操作
[self performSelector:@selector(run) withObject:nil];
//取消線程
- (void)cancel;
//啟動線程
- (void)start;
//判斷某個線程的狀態的屬性
@property (readonly, getter=isExecuting) BOOL executing;
@property (readonly, getter=isFinished) BOOL finished;
@property (readonly, getter=isCancelled) BOOL cancelled;
//設置和獲取線程名字
-(void)setName:(NSString *)n;
-(NSString *)name;
//獲取當前線程信息
+ (NSThread *)currentThread;
//獲取主線程信息
+ (NSThread *)mainThread;
//使當前線程暫停一段時間,或者暫停到某個時刻
+ (void)sleepForTimeInterval:(NSTimeInterval)time;
+ (void)sleepUntilDate:(NSDate *)date;
優缺點:
優點:NSThread比其他多線程方案較輕量,更直觀地控制線程對象
缺點:需要自己管理線程的生命周期,線程同步。線程同步對數據的加鎖會有一定的系統開銷