多线程之NSThread和NSObject

时间:2022-03-11 22:55:46
 #pragma mark - NSThread实现多线程
/*
// 获取当前线程
NSLog(@"currentThread = %@", [NSThread currentThread]); // 获取主线程
NSLog(@"mainThread = %@", [NSThread mainThread]); // 判断当前线程是否为主线程
NSLog(@"isMainThread = %d", [NSThread isMainThread]);
*/
 #pragma mark - NSThread手动开辟子线程
/*
// 参数1:target
// 参数2:方法
// 参数3:传参
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(sayHi) object:nil]; // 让线程开启
[thread start]; // 使用NSThread和NSObject实现的开辟线程,系统会自动释放,不用自己关闭线程,写不写都行
// 结束线程的两种方式:
// 方式一:取消线程
[thread cancel]; // 不是真正的说取消就取消,而是给线程发送一个信号,通过这个信号进行取消的 // 方式二:直接将线程退出
[NSThread exit];
*/
 #pragma mark - NSThread自动开辟子线程
/*
// 线程自动开启
// 把手动开辟的target和selector两个参数顺序反着来
[NSThread detachNewThreadSelector:@selector(sayHi) toTarget:self withObject:nil];
*/
 #pragma mark - NSObject开启子线程

     // 使用performSelectorInBackground开辟子线程
// 第一个参数:selector
// 第二个参数:方法传递的参数
[self performSelectorInBackground:@selector(sayHi) withObject:@"test"]; self.view.backgroundColor = [UIColor yellowColor];
} - (void)sayHi { // 回到主线程修改背景颜色
// 参数1:selector
// 参数2:传参
// 参数3:是否等到子线程的任务完成之后进入主线程
[self performSelectorOnMainThread:@selector(mainThreadChangeColor) withObject:nil waitUntilDone:YES];
} - (void)mainThreadChangeColor { self.view.backgroundColor = [UIColor lightGrayColor]; NSLog(@"%@", [NSThread currentThread]);
NSLog(@"%@", [NSThread mainThread]);
}