iOS 之 GCD(1)

本文介绍在iOS开发中如何使用Grand Central Dispatch (GCD)进行延时操作、单例声明、以及如何在子线程执行并更新主线程UI。通过示例代码解释了串行、并发、同步与异步的概念,并提供了实际应用的代码实现。
摘要由CSDN通过智能技术生成

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

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

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

未完待续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值