写在前面的话:希望大家带着批判的眼光,阅读我的博客。将不足和遗漏一一指出。
先来点实际的,项目中常用到的。(如有遗漏欢迎补充)
1.利用GCD进行延时操作。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( ① * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
②
});
说明
①: 这里写延时的时间,类型是double。(可以精确到零点几秒)
②:这里写延迟时间后 要执行的代码。
2.利用GCD进行单例的声明
#import "UserCenter.h"
static UserCenter * userCenter = nil;
@implementation UserCenter
+(UserCenter *)sharedInstance{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
userCenter = [[UserCenter alloc]init];
});
return userCenter;
}
@end
以上是.m的实现。
这里我也把正常的单例声明写一下。
#import "UserCenter.h"
static UserCenter * userCenter = nil;
@implementation UserCenter
+(UserCenter *)sharedInstance{
@synchronized(self) {
if (!userCenter) {
userCenter = [[UserCenter alloc]init];
}
}
return userCenter;
}
@end
以上是正常单例.m的实现。
3.GCD开启子线程,执行完回到主线程更新UI
dispatch_async(dispatch_get_global_queue(0 , 0), ^{
①
dispatch_async(dispatch_get_main_queue(), ^{
②
});
});
①: 在这里写需要在子线程中要执行的代码
②:子线程中执行完毕后 回到主线程更新UI。
首先,学习GCD之前我认为有必要了解一些东西。
Serial VS Concurrent (串行 vs. 并发)
这些术语描述当任务相对于其它任务被执行,任务串行执行就是每次只有一个任务被执行,任务并发执行就是在同一时间可以有多个任务被执行。
Synchronous VS Asynchronous (同步 vs 异步)
一个同步函数只在完成了它预定的任务后才返回。
一个异步函数,刚好相反,会立即返回,预定的任务会完成但不会等它完成。
因此,一个异步函数不会阻塞当前线程去执行下一个函数。
未完待续。