zoukankan      html  css  js  c++  java
  • iOS开发中的gcd多线程tips

    iOS开发中的gcd多线程tips

    我们经常用到的:

    dispatch_async(dispatch_get_global_queue(0, 0), ^{  
        // 处理耗时操作的代码块 
    
        //通知主线程刷新  
        dispatch_async(dispatch_get_main_queue(), ^{  
            //回调或者说是通知主线程刷新  
        });  
    
    });  
    

    其中main_queue是系统默认的串行队列,global_queue是系统默认的并行队列。

    什么是串行队列(Serial)?

    创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。每个队列中的任务运行在一个由各自串行队列维护的独立线程上,一个队列中只有一个线程。

    什么是并行队列(Concurrent)?

    并行队列是不允许自己创建的,系统中存在三个不同优先级的并行队列。并行队列依旧按照任务添加的顺序启动任务,但是,后一个任务无须等待前一个任务执行完毕,而是启动第一个任务后,立即启动下一个任务。至于同一时刻允许同时运行多少个任务有系统决定。任务各自运行在并行队列为他们提供的独立线程上,并行队列中同时运行多少个任务,就必须维护多少个线程。

    gcd中还有一个概念叫做主调度队列

    主调度队列(main dispatch queue)
    主调度队列中的任务运行在应用程序主线程上,所以,如果你要修改应用程序的界面,他是唯一的选择。

    如下:

     dispatch_async(dispatch_get_main_queue(), ^{
    
            //跟新界面的操作
    
        });
    

    只执行一次:

    static dispatch_once_t onceToken;  
    dispatch_once(&onceToken, ^{  
        // 这里写的代码只会被执行一次
    }); 
    
     

     

    本文出处刚刚在线:http://www.superqq.com/blog/2014/12/27/ioskai-fa-zhong-de-gcdduo-xian-cheng-tips/
  • 相关阅读:
    19面向对象--特殊成员
    18面向对象--成员和组合
    17面向对象--三大特性
    16异常处理
    15(os、random、sys、)(json、pickle )
    14python模块之re
    13正则表达式
    12内置函数补充,递归以及二分法。
    Linux环境ftp搭建及问题总结
    运维之路—linux忘记密码修改(rd.breake 方式)
  • 原文地址:https://www.cnblogs.com/easyToCode/p/5196342.html
Copyright © 2011-2022 走看看