// // ViewController.m // 03-掌握-NSThread基本使用 #import "ViewController.h" #import "XMGThread.h" @interface ViewController () @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self createNewThread1]; } //1.alloc init 创建线程,需要手动启动线程,根据线程的number判断是不是同一个线程。 //线程的生命周期:当任务执行完毕之后被释放掉(比较特殊,) -(void)createNewThread1 { //1.创建线程 /* 第一个参数:目标对象 self 第二个参数:方法选择器 调用的方法 第三个参数:前面调用方法需要传递的参数 nil */ //XMGThread是继承自NSThread的类,threadA是局部变量,大括号之后就销毁了, XMGThread *threadA = [[XMGThread alloc]initWithTarget:self selector:@selector(run:) object:@"ABC"]; //设置属性 threadA.name = @"线程A";//属性用点语法和set方法是一样的。 //设置优先级 取值范围 0.0 ~ 1.0 之间 最高是1.0 默认优先级是0.5,获取cpu的几率更大, threadA.threadPriority = 1.0; //2.启动线程,// 进入就绪状态 -> 运行状态。当线程任务执行完毕,自动进入死亡状态 [threadA start]; NSThread *threadB = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"ABC"];//object是run方法的参数,处于暂停状态。 threadB.name = @"线程b"; threadB.threadPriority = 0.1; [threadB start]; NSThread *threadC = [[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"ABC"]; threadC.name = @"线程C"; [threadC start]; [self createNewThread3]; } //2.分离子线程,自动启动线程,不需要start,拿不到线程对象,无法对线程进行更详细的设置 -(void)createNewThread2 { [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"分离子线程"]; } //3.开启一条后台线程,不需要start,拿不到线程对象,无法对线程进行更详细的设置 -(void)createNewThread3 { [self performSelectorInBackground:@selector(run:) withObject:@"开启后台线程"]; } -(void)run:(NSString *)param { NSLog(@"---run----%@---%@",[NSThread currentThread].name,param); for (NSInteger i = 0; i<1; i++) { NSLog(@"%zd----%@",i,[NSThread currentThread].name); } } @end /* 启动线程 - (void)start; // 进入就绪状态 -> 运行状态。当线程任务执行完毕,自动进入死亡状态 阻塞(暂停)线程 + (void)sleepUntilDate:(NSDate *)date; + (void)sleepForTimeInterval:(NSTimeInterval)ti; // 进入阻塞状态 强制停止线程 + (void)exit; // 进入死亡状态 注意:一旦线程停止(死亡)了,就不能再次开启任务 */
// // XMGThread.h // 03-掌握-NSThread基本使用 // // Created by xiaomage on 16/2/18. // Copyright © 2016年 小码哥. All rights reserved. // #import <Foundation/Foundation.h> @interface XMGThread : NSThread @end
// // XMGThread.m // 03-掌握-NSThread基本使用 // // Created by xiaomage on 16/2/18. // Copyright © 2016年 小码哥. All rights reserved. // #import "XMGThread.h" @implementation XMGThread -(void)dealloc { NSLog(@"dealloc----%@",[NSThread currentThread]); //线程的run方法执行完之后,才调用。 } @end