美文网首页
Object-C_GCD一些操作

Object-C_GCD一些操作

作者: 陈胜华 | 来源:发表于2016-07-20 16:09 被阅读32次

以下仅当笔记使用!!!!!

//词汇:串行,并发,同步,异步
//注意,避免循环引用,使用相应的WeakSelf
#define WeakSelf(weakSelf)     __weak __typeof(&*self) weakSelf = self;
#define StrongSelf(strongSelf) __strong __typeof(&*self) strongSelf = weakSelf;

1.GCD的一些操作

1.为了方便地使用 GCD,苹果提供了一些方法方便我们将 block 放在主线程 或 后台线程执行,或者延后执行

//  后台执行:
dispatch_async(dispatch_get_global_queue(0, 0), ^{
     // something
});
// 主线程执行:
dispatch_async(dispatch_get_main_queue(), ^{
     // something
});
// 一次性执行:
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    // code to be executed once
});
// 延迟 2 秒执行:
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    // code to be executed on the main queue after delay
});

2.dispatch_queue_t 也可以自己定义,如要要自定义 queue,可以用 dispatch_queue_create 方法

dispatch_queue_t urls_queue = dispatch_queue_create("blog.devtang.com", NULL);
dispatch_async(urls_queue, ^{
     // your code
});
dispatch_release(urls_queue);

3.GCD 还有一些高级用法,例如让后台 2 个线程并行执行,然后等 2 个线程都结束后,再汇总执行结果。这个可以用 dispatch_group, dispatch_group_async 和 dispatch_group_notify 来实现

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
     // 并行执行的线程一
});
dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
     // 并行执行的线程二
});
dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{
     // 汇总结果
});

2.Block中修改之外的变量

默认情况下,在程序块中访问的外部变量是复制过去的,即写操作不对原变量生效。但是你可以加上 __block 来让其写操作生效

__block int a = 0;
void  (^foo)(void) = ^{
     a = 1;
}
foo();
// 这里,a 的值被修改为 1

相关文章

  • Object-C_GCD一些操作

    以下仅当笔记使用!!!!! 1.GCD的一些操作 1.为了方便地使用 GCD,苹果提供了一些方法方便我们将 blo...

  • nodejs使用mongoose对mongodb进行增删查改基础

    首先要介绍一下Mongodb的一些基本操作 以上是mongodb的一些基本操作,使用mongoose之后一些操作的...

  • vim常用操作整理

    光标移动 翻页操作 插入 单词搜索和替换 删除操作 复制操作 粘贴操作 其他一些常用操作 批量注释

  • JAVA8 Stream接口,map操作,filter操作,fl

    这篇,我们来看Stream的一些中间操作,关于中间操作的一些介绍,可以看《JAVA8 stream接口 中间操作和...

  • docker使用

    基本命令查看 基本操作 jupyter的一些操作

  • adb操作的一些Android操作

    这几天做一个公司设备指纹获取,设备不能调试,不能传输文件。。。搞死人 记录一下 :第一步adb remount 第...

  • nrm一些操作

    npm 下载速度贼慢,所以推荐使用神器 nrmnpm install nrm -g macbook使用sudo n...

  • JSONObject 一些操作

    1. 插入元素 JSONObject jsonObject =JSONObject.parseObject(par...

  • 一些基本操作

    安装git sudo apt-get install git 安装sublime 首先添加sublime text...

  • kindle一些操作

    先放这里关于制作RSS 推送工具云端 备份同步 传送等各个方面公众号的推送

网友评论

      本文标题:Object-C_GCD一些操作

      本文链接:https://www.haomeiwen.com/subject/zebvjttx.html