美文网首页
一 GCD初识

一 GCD初识

作者: 贺赟生 | 来源:发表于2020-03-16 12:11 被阅读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主循环的执行所以导致界面停滞。故耗时操作应放入其他线程去执行。

    相关文章

      网友评论

          本文标题:一 GCD初识

          本文链接:https://www.haomeiwen.com/subject/auqgehtx.html