• 深入IOS多线程 GCD(一)


    一,什么是GCD

      GCD是异步执行任务的技术之一,一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的dispatch queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理师作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。

      也就是说GCD用我们难以置信的非常简单的记述方法,实现了极为复杂的多线程编程,可以说这是一项划时代的技术。下面是使用了GCD源码的例子,虽然稍微抽象,但从中也能感受到GCD的威力

    dispatch_async(queue,^{
       /*
          长时间处理
          例如AR用画像识别
          例如数据库访问
        */ 
    
       /*长时间处理结束主线程处理结果*/
    
        dispatch_asycn(dispatch_get_main_queue(),^{
    
           /*在主线程更新UI界面*/
        });    
    });

    上面的就是在后台线程中执行长时间处理,处理结束使用主线程处理结果

    dispatch_async(queue,^{ });

    这仅有一行代码就表示让处理在后台线程中执行

    dispatch_asycn(dispatch_get_main_queue(),^{
    
           /*在主线程更新UI界面*/
        });    

    这样,仅此一行代码就能够让处理在主线程中执行,另外GCD使用到了block,进一步的简化了应用程序的代码

    在导入GCD之前,cocoa框架提供了NSObject类的performSelectorInBackground:withObject实例方法和performSelectorOnMainThread实例方法等简单的多线程编程技术。例如,可以改用performSelector系方法来实现前面的GCD的源码看看

    //执行后台线程
    -(void)launchThreadByNSObject_performSelectorInBackground_withObject
    {
       [self performSelectorInBackground:@selector(doWork) withObject:nil];  
    }
    //后台线程方法
    -(void)doWork
    {
       NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];
        /*长时间处理*/
    
        //处理结束,主线程更新
       [self performSelectorOnMainThread:@selector(doneWork) withObject:nil waitUntilDone:NO];
    
       [pool drain];  
    }
    
    //主线程处理方法
    -(void)doneWork
    {
         //更新UI界面等操作
    }
  • 相关阅读:
    CSS3嵌入web字体与布局
    Hbase 技术细节笔记(下)
    Hbase 技术细节笔记(上)
    全排列算法(递归和字典)
    一分钟掌握位运算符—与(&)、非(~)、或(|)、异或(^)
    MySQL中count函数使用方法详解
    ZAB协议与Paxos算法
    泊松分酒(穷举法)
    hadoop解决Could not locate executable nullinwinutils.exe in the Hadoop binaries.问题
    Redis系列八:redis主从复制和哨兵
  • 原文地址:https://www.cnblogs.com/wjblogs/p/IOS.html
Copyright © 2020-2023  润新知