NSThread

开启子线程方式

创建线程

// 创建线程
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不等待。

你可能感兴趣的:(NSThread)