iOS 之 GCD(1)

写在前面的话:希望大家带着批判的眼光,阅读我的博客。将不足和遗漏一一指出。

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

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 异步)
一个同步函数只在完成了它预定的任务后才返回。
一个异步函数,刚好相反,会立即返回,预定的任务会完成但不会等它完成。
因此,一个异步函数不会阻塞当前线程去执行下一个函数。

未完待续。

猜你喜欢

转载自blog.csdn.net/lwq718691587/article/details/50946555