开启子线程方式
创建线程
// 创建线程
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:nil];
线程属性
线程名字
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
thread.name = @"myThread";
线程优先级
0.0~1.0 默认0.5
优先级越高,被CPU调度到的概率越大
thread.threadPriority = 1.0;
阻塞线程
阻塞线程一
[NSThread sleepForTimeInterval:2.0f];
阻塞线程二
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0f]];
退出线程
[NSThread exit];
同步锁
锁对象必须是一个全局对象
@synchronized (self) {
// 多线程操作
}
原子属性和非原子属性
- nonatomic 非原子属性 不安全
- atomic 原子属性 安全
atomic实现线程安全的原理:为set方法加同步锁,所以会消耗大量资源。
线程间通信
线程间通信 方式一
[self performSelectorOnMainThread:@selector(demo:) withObject:param waitUntilDone:YES];
线程间通信 方式二
[self performSelector:@selector(demo:) onThread:[NSThread mainThread] withObject:param waitUntilDone:YES];
waitUntilDone参数说明:
YES等待任务执行完成之后再执行后续操作,NO不等待。