GCD的常用代码块
一、队列
1、获取全局的并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, );
2、创建一个串行队列
dispatch_queue_t queue = dispatch_queue_create("queueName", NULL);
3、获取主队列
dispatch_queue_t queue = dispatch_get_main_queue();
二、执行函数
1、将任务添加到xx队列中去异步执行
dispatch_async(queue, ^{
NSLog(@"-----下载1---%@", [NSThread currentThread]);
});
2、将任务添加到xx队列中去同步执行
dispatch_sync(queue, ^{
NSLog(@"-----下载2---%@", [NSThread currentThread]);
});
三、线程间的通信
dispatch_async(GlobalQueue, ^{
// 1.子线程下载图片
dispatch_async(MainQueue, ^{
// 2.回到主线程设置图片
});
});
四、延迟执行
1、3秒后回到主线程执行block中的代码
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( * NSEC_PER_SEC)), queue, ^{
NSLog(@"------task------%@", [NSThread currentThread]);
});
2.3秒后自动开启新线程执行block中的代码
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, );
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( * NSEC_PER_SEC)), queue, ^{
NSLog(@"------task------%@", [NSThread currentThread]);
});
五、一次性执行
+ (instancetype)client
{
static AFNetClient *client = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
client = [[AFNetClient alloc]init];
});
return client;
}
六、队列组的使用
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispatch_group_async(group, queue, ^{
// 1.下载图片1
}); dispatch_group_async(group, queue, ^{
// 2.下载图片2
}); // 3.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block)
dispatch_group_notify(group, queue, ^{
// 3.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block) dispatch_async(dispatch_get_main_queue(), ^{
// 4.回到主线程显示图片
});
});
七、创建单例
1、工具宏文件HMSingleton.h
// .h文件
#define HMSingletonH(name) + (instancetype)shared##name; // .m文件
#if __has_feature(objc_arc) #define HMSingletonM(name) \
static id _instace; \
\
+ (id)allocWithZone:(struct _NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instace = [super allocWithZone:zone]; \
}); \
return _instace; \
} \
\
+ (instancetype)shared##name \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instace = [[self alloc] init]; \
}); \
return _instace; \
} \
\
- (id)copyWithZone:(NSZone *)zone \
{ \
return _instace; \
} #else #define HMSingletonM(name) \
static id _instace; \
\
+ (id)allocWithZone:(struct _NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instace = [super allocWithZone:zone]; \
}); \
return _instace; \
} \
\
+ (instancetype)shared##name \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instace = [[self alloc] init]; \
}); \
return _instace; \
} \
\
- (id)copyWithZone:(NSZone *)zone \
{ \
return _instace; \
} \
\
- (oneway void)release { } \
- (id)retain { return self; } \
- (NSUInteger)retainCount { return ;} \
- (id)autorelease { return self;} #endif
2、创建单例MHMusicTool
2.1、MHMusicTool.h文件
#import <Foundation/Foundation.h> @interface HMMusicTool : NSObject
HMSingletonH(MusicTool)
@end
2.2、MHMusicTool.m文件
#import "HMMusicTool.h" @implementation HMMusicTool
HMSingletonM(MusicTool)
@end
3、使用单例MHMusicTool
HMMusicTool *tool1 = [HMMusicTool sharedMusicTool];
HMMusicTool *tool2 = [HMMusicTool sharedMusicTool];
GCD的常用代码块的更多相关文章
- vs2015常用代码块与自定义代码块
常用代码块 代码段名 描 述 #if 该代码段用#if和#endif命令围绕代码 #region 该代码段用#region和#endregion命令围绕代码 ~ 该代码段插入一个析构函数 att ...
- 关于Hbuild引用mui常用代码块以及部分控件.
MUI-最接近原生APP体验的高性能前端框架, 追求性能体验,是我们开始启动MUI项目的首要目标,轻量必然是重要特征: MUI不依赖任何第三方JS库,压缩后的JS和CSS文件仅有100+K和60+K, ...
- iOS开发常用代码块(第二弹)
GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispat ...
- iOS开发常用代码块(2)
GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispa ...
- Xcode常用代码块
Xcode的代码片段(Code Snippets)创建自定义的代码片段,当你重用这些代码片段时,会给你带来很大的方便. 常用的: 1.strong:@property (nonatomic,stron ...
- iOS开发常用代码块
遍历可变数组的同时删除数组元素 NSMutableArray *copyArray = [NSMutableArray arrayWithArray:array]; NSString *str1 = ...
- iOS 常用代码块
1.判断邮箱格式是否正确的代码: // 利用正则表达式验证 -( BOOL )isValidateEmail:( NSString *)email { NSString *emailRegex ...
- html 常用代码块
解决外边框不计入div尺寸的代码-moz-box-sizing: border-box;box-sizing: border-box;-webkit-box-sizing: border-box; 手 ...
- 常用代码块:创建httpclient 2
HttpGet httpGet = new HttpGet(url);SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(ne ...
随机推荐
- 思科ACS的性能总结
ACS Performance & Scale 思科ACS目前还能支持的可能就是ACS5.8版本了,该版本也将于2020年停止支持,关于ACS信息会逐步退出大家的视野.该文档是Cisco论坛t ...
- Linux shell sed 命令详解
详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...
- 每天进步一点点------基础实验_13_有限状态机 :Mealy型序列检测器
/********************************************************************************* * Company : * Eng ...
- redis-server.exe redis.windows.conf 报错
在参考博文:https://blog.csdn.net/erlian1992/article/details/54382443#comments 学习redis的时候启动报错 C:\Users\Adm ...
- c# 异常:值不能为 null。 参数名: source
异常详细信息: System.ArgumentNullException: 值不能为 null.参数名: source 其实问题那就出在 Select() 方法,在 Select 上按 F12 查看定 ...
- 解决linux乱码问题
echo "LANG="zh_CN.UTF-8" >> /etc/sysconfig/i18n yum -y install kde-l10n-Chinese ...
- source insight 编译后出现停止工作解决方法
解决方法: 工程的路径不要有中文,都用英文
- Linux-VMware 15 虚拟机黑屏问题
VMware 15 虚拟机黑屏问题 最近终于舍弃win7,换了win10的操作系统... VM12不兼容,各种问题频出,于是换了VM15. 新装了kali2019.03,结果刚装好不久,在某一 ...
- JVM系列(三)之GC
什么是GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄 ...
- 传奇gee引擎,智能假人,假人脚本,geeM2假人
开新区注意事项: 1.新区无任何玩家数据下可以运行“MirServer\假人行会初始化”目录下的“点我初始化假人行会.Bat”程序 2.默认假人后台管理密码为:2139263 ;--------- ...