在iOS开发中我们经常会用到多线程来处理一些业务,那么iOS里有哪些实现多线程的方式呢?
- NSTread:封装程度最小、最轻量级,开销较大。
- GCD(Grand Central Dispatch):内部效率优化,提供简洁的C语言接口,更加简单高效。
- NSOperation:基于GCD的一个抽象基类,不需要管理线程的生命周期和同步,比GCD可控性强。
一、NSTread
NSTread封装程度最小、最轻量级的多线程编程接口,它使用更加灵活,但需要手动管理线程的生命周期、线程同步和线程加锁等,开销较大。
/** NSThread 静态工具方法 **/
//1、是否开启了多线程
BOOL isMultiThread = [NSThread isMultiThreaded];
//2、获取当前线程
NSThread *currentThread = [NSThread currentThread];
//3、获取主线程
NSThread *mainThread = [NSThread mainThread];
//4、睡眠当前线程
//4.1、线程睡眠5s
[NSThread sleepForTimeInterval:5];
//4.2、线程睡眠到指定时间,效果同上
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:5]];
//5、退出当前线程,注意不要在主线程调用,防止主线程被kill掉
[NSThread exit];
NSThread的使用比较简单,可以动态创建并初始化NSThread对象,对其进行设置并启动;也可以通过NSThread的静态方法快速创建并启动新线程;
/** NSTread 线程对象的基本创建,target为入口方法所在的对象,selector为线程入口方法 **/
//1、线程实例对象创建与设置
NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
//设置线程优先级threadPriority(0~1.0),该属性即将被抛弃,将使用qualityOfService代替
//newThread.threadPriority = 1.0;
newThread.qualityOfService = NSQualityOfServiceUserInteractive;
//开启线程
[newThread start];
//2、静态方法快速创建并开启新线程
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
[NSThread detachNewThreadWithBlock:^{
NSLog(@"block run");
}];