一、队列

1、获取全局的并发队列

  1. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, );

2、创建一个串行队列

  1. dispatch_queue_t queue = dispatch_queue_create("queueName", NULL);

3、获取主队列

  1. dispatch_queue_t queue = dispatch_get_main_queue();

二、执行函数

1、将任务添加到xx队列中去异步执行

  1. dispatch_async(queue, ^{
  2. NSLog(@"-----下载1---%@", [NSThread currentThread]);
  3. });

2、将任务添加到xx队列中去同步执行

  1. dispatch_sync(queue, ^{
  2. NSLog(@"-----下载2---%@", [NSThread currentThread]);
  3. });

三、线程间的通信

  1. dispatch_async(GlobalQueue, ^{
  2. // 1.子线程下载图片
  3.  
  4. dispatch_async(MainQueue, ^{
  5. // 2.回到主线程设置图片
  6.  
  7. });
  8. });

四、延迟执行

1、3秒后回到主线程执行block中的代码

  1. dispatch_queue_t queue = dispatch_get_main_queue();
  2. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( * NSEC_PER_SEC)), queue, ^{
  3. NSLog(@"------task------%@", [NSThread currentThread]);
  4. });

2.3秒后自动开启新线程执行block中的代码

  1. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, );
  2. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( * NSEC_PER_SEC)), queue, ^{
  3. NSLog(@"------task------%@", [NSThread currentThread]);
  4. });

五、一次性执行

  1. + (instancetype)client
  2. {
  3. static AFNetClient *client = nil;
  4. static dispatch_once_t onceToken;
  5. dispatch_once(&onceToken, ^{
  6. client = [[AFNetClient alloc]init];
  7. });
  8. return client;
  9. }

六、队列组的使用

  1. dispatch_group_t group = dispatch_group_create();
  2. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, );
  3.  
  4. dispatch_group_async(group, queue, ^{
  5.   // 1.下载图片1
  6.   });
  7.  
  8. dispatch_group_async(group, queue, ^{
  9.   // 2.下载图片2
  10. });
  11.  
  12. // 3.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block)
  13. dispatch_group_notify(group, queue, ^{
  14.   // 3.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block)
  15.  
  16. dispatch_async(dispatch_get_main_queue(), ^{
  17.     // 4.回到主线程显示图片
  18. });
  19. });

七、创建单例

1、工具宏文件HMSingleton.h

  1. // .h文件
  2. #define HMSingletonH(name) + (instancetype)shared##name;
  3.  
  4. // .m文件
  5. #if __has_feature(objc_arc)
  6.  
  7. #define HMSingletonM(name) \
  8. static id _instace; \
  9. \
  10. + (id)allocWithZone:(struct _NSZone *)zone \
  11. { \
  12. static dispatch_once_t onceToken; \
  13. dispatch_once(&onceToken, ^{ \
  14. _instace = [super allocWithZone:zone]; \
  15. }); \
  16. return _instace; \
  17. } \
  18. \
  19. + (instancetype)shared##name \
  20. { \
  21. static dispatch_once_t onceToken; \
  22. dispatch_once(&onceToken, ^{ \
  23. _instace = [[self alloc] init]; \
  24. }); \
  25. return _instace; \
  26. } \
  27. \
  28. - (id)copyWithZone:(NSZone *)zone \
  29. { \
  30. return _instace; \
  31. }
  32.  
  33. #else
  34.  
  35. #define HMSingletonM(name) \
  36. static id _instace; \
  37. \
  38. + (id)allocWithZone:(struct _NSZone *)zone \
  39. { \
  40. static dispatch_once_t onceToken; \
  41. dispatch_once(&onceToken, ^{ \
  42. _instace = [super allocWithZone:zone]; \
  43. }); \
  44. return _instace; \
  45. } \
  46. \
  47. + (instancetype)shared##name \
  48. { \
  49. static dispatch_once_t onceToken; \
  50. dispatch_once(&onceToken, ^{ \
  51. _instace = [[self alloc] init]; \
  52. }); \
  53. return _instace; \
  54. } \
  55. \
  56. - (id)copyWithZone:(NSZone *)zone \
  57. { \
  58. return _instace; \
  59. } \
  60. \
  61. - (oneway void)release { } \
  62. - (id)retain { return self; } \
  63. - (NSUInteger)retainCount { return ;} \
  64. - (id)autorelease { return self;}
  65.  
  66. #endif

2、创建单例MHMusicTool

2.1、MHMusicTool.h文件

  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface HMMusicTool : NSObject
  4. HMSingletonH(MusicTool)
  5. @end

2.2、MHMusicTool.m文件

  1. #import "HMMusicTool.h"
  2.  
  3. @implementation HMMusicTool
  4. HMSingletonM(MusicTool)
  5. @end

3、使用单例MHMusicTool

  1. HMMusicTool *tool1 = [HMMusicTool sharedMusicTool];
  2. HMMusicTool *tool2 = [HMMusicTool sharedMusicTool];

GCD的常用代码块的更多相关文章

  1. vs2015常用代码块与自定义代码块

    常用代码块 代码段名 描    述 #if 该代码段用#if和#endif命令围绕代码 #region 该代码段用#region和#endregion命令围绕代码 ~ 该代码段插入一个析构函数 att ...

  2. 关于Hbuild引用mui常用代码块以及部分控件.

    MUI-最接近原生APP体验的高性能前端框架, 追求性能体验,是我们开始启动MUI项目的首要目标,轻量必然是重要特征: MUI不依赖任何第三方JS库,压缩后的JS和CSS文件仅有100+K和60+K, ...

  3. iOS开发常用代码块(第二弹)

    GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispat ...

  4. iOS开发常用代码块(2)

    GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispa ...

  5. Xcode常用代码块

    Xcode的代码片段(Code Snippets)创建自定义的代码片段,当你重用这些代码片段时,会给你带来很大的方便. 常用的: 1.strong:@property (nonatomic,stron ...

  6. iOS开发常用代码块

    遍历可变数组的同时删除数组元素 NSMutableArray *copyArray = [NSMutableArray arrayWithArray:array]; NSString *str1 = ...

  7. iOS 常用代码块

    1.判断邮箱格式是否正确的代码: // 利用正则表达式验证 -( BOOL )isValidateEmail:( NSString  *)email {   NSString  *emailRegex ...

  8. html 常用代码块

    解决外边框不计入div尺寸的代码-moz-box-sizing: border-box;box-sizing: border-box;-webkit-box-sizing: border-box; 手 ...

  9. 常用代码块:创建httpclient 2

    HttpGet httpGet = new HttpGet(url);SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(ne ...

随机推荐

  1. Bugku-CTF之细心 (想办法变成admin)

    Day30     细心

  2. Day0 认识Java与变量类型

    字节码与虚拟机 Java介于编译型语言和解释型语言之间.编译型语言如C.C++,代码是直接编译成机器码执行,但是不同的平台(x86.ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码 ...

  3. Django - 在settings配置终端打印SQL语句

    LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DE ...

  4. Python学习第二十八课——Django(templates)

    templates 讲后台得到的数据渲染到页面上:话不多说,先看具体代码. urls: from django.conf.urls import url from django.contrib imp ...

  5. 使用MQTTBox连接阿里云平台

    这篇只做一个简单的介绍,和上一篇没有根本的区别.只是就两个客户端的差异介绍一下. 一.需要参考的内容: 使用MQTT.fx连接阿里云平台: https://www.cnblogs.com/mhtc/p ...

  6. C语言:利用指针解决:统计一个长度为2的字符串在另外一个字符串中出现的次数。

    //统计一个长度为2的字符串在另外一个字符串中出现的次数. #include <conio.h> #include <stdio.h> #include <string. ...

  7. Json日期格式化,出去返回的T

    第一种办法:前端JS转换: //格式化显示json日期格式 function showDate(jsonDate) { var date = new Date(jsonDate); var forma ...

  8. 「NOI2001」食物链

    传送门 Luogu 解题思路 带权并查集我不会啊 考虑种类并查集(扩展域并查集的一种). 开三倍空间,一倍维护本身,二倍维护猎物,三倍维护天敌,然后用并查集搞一搞就好了. 细节注意事项 咕咕咕 参考代 ...

  9. 微信公众平台接口获取时间戳为10位,java开发需转为13位

    问题1:为什么会生成13位的时间戳,13位的时间戳和10时间戳分别是怎么来的 ? java的date默认精度是毫秒,也就是说生成的时间戳就是13位的,而像c++或者php生成的时间戳默认就是10位的, ...

  10. Python中令人迷惑的4个引用

    第一个:执行时机的差异 1. array = [1, 8, 15] g = (x for x in array if array.count(x) > 0) array = [2, 8, 22] ...