您的位置:首页 > 移动开发 > IOS开发

iOS 之 GCD(1)

2016-03-21 15:00 302 查看
写在前面的话:希望大家带着批判的眼光,阅读我的博客。将不足和遗漏一一指出。

先来点实际的,项目中常用到的。(如有遗漏欢迎补充)

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 异步)

一个同步函数只在完成了它预定的任务后才返回。

一个异步函数,刚好相反,会立即返回,预定的任务会完成但不会等它完成。

因此,一个异步函数不会阻塞当前线程去执行下一个函数。

未完待续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: