// 1、创建一条线程
NSThread *thread = [[NSThread alloc]
initWithTarget:self selector:@selector(threadMain) object:nil];
// 2、启动线程
[thread start];
线程一启动就会执行self的threadMain方法
+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程
- (IBAction)btnClick {
// 1、获得当前的线程,打印线程
NSThread *curThread = [NSThread currentThread];
NSLog(@"%@ --- run,isMainThread == %d",curThread,[curThread isMainThread]);
// 2、获取主线程,打印主线程
NSThread *mainThread = [NSThread mainThread];
NSLog(@"%@ --- mainThread,%d",mainThread,[NSThread isMainThread]);
结果:从打印结果看,btnClick处于主线程,内存地址相同。
// 1.获得当前的线程
NSThread *current = [NSThread currentThread];
// 2、获取和设置当前线程的优先级:范围0 - 1,默认0.5.值越大,优先级越高
+ (double)threadPriority;
+ (BOOL)setThreadPriority:(double)p;
// 3、线程的名称
- (void)setName:(NSString *)name;
- (NSString *)name;
其他线程创建的方式
// 1、从主线程分离一条线程,创建线程后自动启动线程
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
// 2、隐式创建并启动线程
[self performSelectorInBackground:@selector(run) withObject:nil];
上述2种创建线程方式的优缺点
优点:简单快捷
缺点:无法对线程进行更详细的设置
// 启动线程
- (void)start;
// 进入就绪状态 -> 运行状态。当线程任务执行完毕,自动进入死亡状态
// 阻塞(暂停)线程
+ (void)sleepUntilDate:(NSDate *)date;
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
// 进入阻塞状态
// 强制停止线程
+ (void)exit;
// 进入死亡状态
注意:一旦线程停止(死亡)了,就不能再次开启,否则程序崩溃。