• iOS多线程之GCD小记


    iOS多线程之GCD小记

    iOS多线程方案简介

    从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中:
    1、Pthreads
    这是一套可以在很多操作系统上通用的多线程API,是基于C语言的,在在oc中使用时需要包含
    #import<pthread.h>
    使用这种多线程方案需要手动处理线程的各个状态的转换,也就是要管理线程的生命周期。
    2、NSThread
    这种多线程方案经过了苹果的封装,是一种面向对象的方案,因此可以直接操控线程对象,相对来说比较便捷,其生命周期也要手动管理
    3、GCD
    全称Grand Central Dispatch,是苹果开发的一套多线程解决方案。
    4、NSOperation & NSOperationQueue
    NSOperation是苹果对GCD的进一步封装,完全面向对象
    好的,大体介绍了这几种多线程方案后,我们正式选择走进GCD。

    GCD

    GCD提供了一套全新的API共用户使用,它可以将应用需要执行的工作拆分为可分散在多个线程和多个CPU上的更小的块。它可以自动管理线程生命周期(线程创建、任务调度、线程销毁)。用户只需将要执行的任务告诉GCD就行了。GCD使用的也是C语言。它可以使用程序块(Block)进行访问。
    GCD中有两个概念:任务和队列
    任务就是操作,就是用户想要做的事情,可以用一段代码来表示。任务执行方式分为同步和异步。
    队列用于存放任务,队列分为串行队列和并行队列两种。
    创建队列
    在所有的任务队列中,有一个主队列,它负责UI的刷新,任何耗时的任务都不应该放在主队列中。创建主队列的代码如下:

    dispatch_queue_t queue = ispatch_get_main_queue();
    

    创建串行队列

     dispatch_queue_t queue = dispatch_queue_create("testQueue1", DISPATCH_QUEUE_SERIAL);
     dispatch_queue_t queue = dispatch_queue_create("testQueue2", NULL);
    

    第一个参数是队列的标识符,用来唯一识别队列。第二个参数说明队列的性质是串行还是并行。
    创建并行队列

      dispatch_queue_t queue = dispatch_queue_create("testQueue3", DISPATCH_QUEUE_CONCURRENT);
      
    

    全局并行队列
    这个队列是系统提供的,其获取方式如下

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    

    第一个参数表示队列的优先级,第二个参数暂时未使用,设置为0

    创建任务
    任务分为同步任务和异步任务
    创建同步任务

      dispatch_sync(<testQueue3>, ^{
          //程序块,即要执行的具体任务
          //GCD获取这里的整个程序块,然后将它传递给一个后台线程,
          //程序块将在这里一次执行异步,就像在主线中一样
      });
    

    第一个参数传入队列名,即要把新创建的任务加入到哪个队列中,第二个参数是一个程序块
    创建异步任务

      dispatch_async(<testQueue3>, ^{
          //程序块,即要执行的任务
      });
    

    从其他线程返回主线程

    dispatch_async(dispatch_get_main_queue(), ^{
    
    });
    

    总结

    事实上,GCD就是帮你封装好了多线程的操作
    一个列队相当于一个线程,在列队里面的任务都是按照先进先出的顺序来执行的
    暂时就只有这么粗浅的理解,时间充足的话,还是要实际编写一下代码,这样可以理解的更加深入。

    部分代码参考:http://www.jianshu.com/p/0b0d9b1f1f19

  • 相关阅读:
    -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.chan
    failed to export application
    IOS InHouse 发布流程
    BoneCP学习笔记
    form表单, css1
    HTTP协议, HTML
    自定义ORM框架
    数据库5
    数据库4
    数据库3
  • 原文地址:https://www.cnblogs.com/scut-linmaojiang/p/5288409.html
Copyright © 2020-2023  润新知