• IOS 多线程之GCD


    参考:http://www.cnblogs.com/wendingding/p/3806821.html

    <<Objective-C基础教程>> 第二版

    一 简介

    GCD 全称是Grand Central Dispatch,可译为:”牛逼的中央调度器”。是苹果公司为多核并行运算提出的解决方案。自动管理线程的生命周期(创建线程,调度任务,销毁线程等),程序员只需要告诉GCD想要执行什么的任务,不需要编写任何线程管理代码。

    1 GCD存在于libdispatch.dylib这个库中,默认加载。

    2 GCD是纯C语言的,因此我们在编写GCD相关代码的时候,面对的函数,而不是方法。

    3 GCD中的函数大多数都以dispatch开头。

    4 属性如果没有指定nonatomic,则编译器的getter与setter方法互斥。

    5 后台执行代码前缀一般是:performSelector... ,最简单的就是performSelectorInBackground:withObject

    6 线程中的代码最多只能有一个参数。

    二 任务与队列

    GCG中有两个核心概念:任务,执行什么操作;队列,存放任务。

    1 GCD中有两个执行任务的函数:

    同步方式 dispatch_sync(dispatch_queue_t queue, dispatch_block_t block)

    异步方式 dispatch_async(dispatch_queue_t queue, dispatch_block_t block)

    区别:同步方式在当前线程中执行,异步方式在另一个线程中执行。 

    添加任务最简单的方法如上添加代码块,或者添加函数:

    dispatch_async_f(“…”,(__bridge void *)[NSNumber numberWithInt:3],(dispatch_function_t)mydispatchFunction);

    dispatch_sync_f(…)

    队列的暂停与恢复:dispatch_suspend(_serial_queue);dispatch_resume(_serial_queue);

    2 队列分为两大类型:

    并发队列(Concurrent Dispatch Queue):可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)并发功能只有在异步(dispatch_async)函数下才有效.全局的,无需内存管理。

    创建方法 dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    串行队列(Serial Dispatch Queue):一个任务执行完毕后,再执行下一个任务.先入先出(FIFO).

    创建方法:dispatch_queue_t queue = dispatch_queue_create(“queue”,NULL);

    另:主队列:dispatch_queue_t queue = dispatch_get_main_queue();它是特殊的串行队列。

    获取当前队列:dispatch_queue_t queue = dispatch_get_current_queue();

    队列的内存管理:dispatch_retain(),dispatch_release(),只能用于自己创建的队列,全局队列不可用。

  • 相关阅读:
    Java RMI简单例子HelloWorld
    Java RMI远程方法调用
    javascript中通过replace函数搜索和替换指定字符串
    详解公钥、私钥、数字证书的概念
    标准MD5加密算法
    基于Spring Boot构建的Spring MVC快速入门
    http://jinnianshilongnian.iteye.com/blog/1996071
    双11也不要乱买书
    Mybatis 中的转义字符(转帖)
    【Maven】为什么Maven dependencies有的jar包显示为灰色?
  • 原文地址:https://www.cnblogs.com/qq411715078/p/5139280.html
Copyright © 2020-2023  润新知