#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];#pragma mark -- GCD串行队列--//系统提过的一个串行队列//使用系统提供串行队列(主线程队列)
    dispatch_queue_t queue = dispatch_get_main_queue();//创建一个串行队列//第一个参数: 系统提供好的一个宏//第二个参数: 系统保留字段 0
    dispatch_queue_t queue = dispatch_queue_create(DISPATCH_QUEUE_SERIAL, 0);#pragma mark -- 创建一个并行的队列--//使用系统提供的并行队列//DISPATCH_QUEUE_PRIORITY_BACKGROUND表示队列的优先级// 0 保留字段
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);//创建一个并行队列//第一个参数: 表示这个队列的名字//第二个参数: 表示系统提供好的一个宏// dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);//使用dispatch_async 向队列中添加任务dispatch_async(queue, ^{NSLog(@"mian == %@, current == %@", [NSThread mainThread], [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"mian1 == %@, current1 == %@", [NSThread mainThread], [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"mian2 == %@, current2 == %@", [NSThread mainThread], [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"mian3 == %@, current3 == %@", [NSThread mainThread], [NSThread currentThread]);});dispatch_async(queue, ^{NSLog(@"mian4 == %@, current4 == %@", [NSThread mainThread], [NSThread currentThread]);});#pragma mark  -- 表示几秒之后做什么事情--//    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//        NSLog(@"已经3秒之后了");
//
//    });
//    #pragma mark -- 重复的向一个队列中添加一系列的任务--dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_SERIAL);dispatch_apply(3, queue, ^(size_t index) {NSLog(@"index == %zu", index);});#pragma mark -- 分组--//创建一个分组dispatch_group_t group = dispatch_group_create();//创建一个队列dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);//向分组中添加一个任务dispatch_group_async(group, queue, ^{NSLog(@"我是第1个任务");});dispatch_group_async(group, queue, ^{NSLog(@"我是第2个任务");});dispatch_group_async(group, queue, ^{NSLog(@"我是第3个任务");});dispatch_group_async(group, queue, ^{NSLog(@"我是第4个任务");});//向分组添加结束任务//注意: 不要将结束任务放到第一个位置dispatch_group_notify(group, queue, ^{NSLog(@" 无论这样,我是最后一个任务");});#pragma  mark -- 并发中的串行 (披着羊皮的狼)--dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);dispatch_async(queue, ^{NSLog(@"我是查询操作1");});dispatch_async(queue, ^{NSLog(@"我是查询操作2");});dispatch_barrier_async(queue, ^{NSLog(@"我是插入操作");});dispatch_async(queue, ^{NSLog(@"我是查询操作3");});dispatch_async(queue, ^{NSLog(@"我是查询操作4");});}

MyObject类.m中

#import "MyObject.h"static MyObject *object = nil;@implementation MyObject+ (MyObject *)shareMyObject
{static dispatch_once_t onceToken;//表示同一时间内只有一个线程可以访问block块里面的内容
    dispatch_once(&onceToken, ^{if (object == nil) {object = [[MyObject alloc]init];}});return object;
}

转载于:https://www.cnblogs.com/huyibo/p/5371107.html

UI进阶之多线程(GCD)相关推荐

  1. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  2. 【进阶】 --- 多线程、多进程、异步IO实用例子

    [进阶] --- 多线程.多进程.异步IO实用例子:https://blog.csdn.net/lu8000/article/details/82315576 python之爬虫_并发(串行.多线程. ...

  3. iOS 多线程-GCD栅栏方法

    iOS 多线程-GCD任务+队列. iOS 多线程-GCD队列组. iOS 多线程-GCD栅栏方法. 上一篇文章记录了队列组的使用,是为了处理多个任务之间的顺序.但是开发中会出现多组任务的顺序问题. ...

  4. 【Java进阶】多线程(一)

    文章目录 [Java进阶]多线程 第一章:线程 1 并发与并行 2 进程与线程 3.Java 创建线程类 4.多线程原理 5 .Thread类 6 创建线程方式二 7 Thread和Runnable区 ...

  5. swift 多线程GCD和延时调用

    GCD 是一种非常方便的使用多线程的方式.通过使用 GCD,我们可以在确保尽量简单的语法的前提下进行灵活的多线程编程.在 "复杂必死" 的多线程编程中,保持简单就是避免错误的金科玉 ...

  6. Swift - 多线程GCD详解

    //  GCD详解 //  目录: //  1. 创建GCD队列(最常用) //  2. 自定义创建队列 //  3. 使用多线程实现延迟加载 //  4. 使用多线程实现重复(循环) //  5. ...

  7. IOS开发之多线程 -- GCD的方方面面

    前言:这篇GCD的博文是本人阅读了很多海内外大神的关于GCD的文章,以及结合之前自己对GCD的粗浅的认识,然后取其精华,去其槽粕,综合起来的笔记,而且是尽可能的以通熟易懂的并且是正确的理论论述方式呈现 ...

  8. iOS 多线程GCD

    为了了解.记忆更深刻,记录下,后面也会附上自己git 上demo,欢迎互相学习!! 一:什么是GCD GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充 ...

  9. 多线程--GCD的基本用法

    ---恢复内容开始--- GCD GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务. ...

最新文章

  1. 【ASM学习】普通数据库向ASM实例的迁移(二)
  2. VC++ VS2010 error LNK1123 转换到 COFF 期间失败 怎么办
  3. C++中的4个类型转换关键字
  4. SpringMVC拦截器之拦截器接口方法演示
  5. 科技巨头开发人工智能 稀缺品种或成A股香饽饽
  6. 20个天才般的走心设计,真是太牛了!
  7. python协同过滤调用包_简单的python协同过滤程序实例代码
  8. python 分类变量xgboost_XGBoost 原理 及 常见面试题
  9. 【转载】H264编码原理以及I帧、B帧、P帧
  10. 2.卷1(套接字联网API)---传输层:TCP,UDP 和 SCTP
  11. 如何区分字母大写I小写字母l以及数字1
  12. 解决连接kudu时,delaying RPC due to Service unavailable: Master config (**.**.**.**:7051) has no leader
  13. cannot be applied to
  14. 编辑器——sublime
  15. 三人行,必有我师焉!
  16. Unity—火焰特效制作
  17. Javascript - The same RegExp behave differently
  18. python flask豆瓣微信小程序案例
  19. 插上耳机一说话别人听有很大的电流声怎么办?
  20. ECS云服务器搭建自己的博客网站worldpress

热门文章

  1. Linux系统Red Hat Enterprise Linux 7无法使用yml源的问题
  2. 技能树之旅: 从模块分离到测试
  3. 我真的要做一辈子的Android程序员吗?,含面试题+答案
  4. 计算机的优点和劣势,计算机弧形屏幕的优缺点是什么?
  5. AI教父Geoffrey Hinton:AGI革命堪比车轮的发明
  6. 推荐给大家一份我整理的 Java 书单
  7. recast 4 BuildContours
  8. PAL制与NTSC制区别
  9. iPhone直接跑大模型!陈天奇等人新作引爆AI界,算力不是问题了
  10. 用上一次就会爱上的:明基PD2710QC显示器