一 GCD初识
2020-03-16 本文已影响0人
贺赟生
1.GCD基础概念
(此笔记为学习Objective-C高级编程书中第三章所记录的相关知识点)
gcd为异步执行任务的技术之一,只要用合适的queue就可以生成线程去执行任务。例如''
[dispatch_async(queue, ^{
//异步执行的代码
[dispatch_async(dispatch_get_main_queue(), ^{
//回到主线程执行代码
})];
})];
当然在导入GCD之前 NSObject类中也提供类似的示例方法 来实现简单的多线程开发 例如
- (void)viewDidLoad {
[super viewDidLoad];
[self performSelectorInBackground:@selector(doSometing) withObject:nil];
}
//开启后台执行的方法
-(void)doSometing{
//处理耗时操作 如下载图片 访问数据库等操作
//.....
//处理完成之后同步主线程
[self performSelectorOnMainThread:@selector(finishWork) withObject:nil waitUntilDone:NO];
}
//主线程处理的方法
-(void)finishWork{
//回到主线程 处理 如操作UI
}
NSObject提供的多线程方法虽然比GCD看起来简单 但是简便性上却差了很多 ,所以使用GCD来开发多线程还是可以提高执行效率
2.多线程编程
CPU技术有很多 但是基本是一个CPU核能够执行的的CPU命令始终为1 ,但是现在由于硬件都提供了多核,那这样就可以由多个CPU并行执行多个线程,这样的技术为多线程编程。
但是,多线程编程也容易引发各种问题。例如 多个线程竞争相同的资源可能导致数据的不一致、停止等待的线程会导致多个线程持续等待而造成死锁、若使用太多的线程又会消耗大量的内存。但是即便如此使用多线程编程可以保证应用程序的响应性能。
在应用程序启动时,最先执行的线程就是主线程,主要用来绘界面,处理屏幕事件等操作。若将耗时操作放入主线程则会影响RunLoop主循环的执行所以导致界面停滞。故耗时操作应放入其他线程去执行。