码迷,mamicode.com
首页 > 其他好文 > 详细

带你系统学习GCD(三)

时间:2016-05-14 01:07:10      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

个人博客主站欢迎访问有系统GCD学习整合资料。

dispatch_suspend / dispatch_resume

当使用Dispatch Queue 进行复杂处理的时候,有的时候希望不执行已追加的处理. 这种情况下可以挂起Dispatch Queue就可以, 当需要他执行的时候在执行恢复

    // 挂起(可以理解为暂停)
    dispatch_suspend(queue);
    // 恢复
    dispatch_resume(queue);

dispatch_once

函数是在应用程序执行中只执行一次指定处理的API
singleton 常用这个函数创建

static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //
        // 初始化
    });

singleton

+ (instancetype)shareVC
    {
        // 定义了一个标识(onceToken)
        // 确保block里的内容只执行一次
        static ZJW_VC *vc = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            vc = [[ZJW_VC alloc] init];
        });
        return vc;
    }

GCD的实现

我们所使用的GCD的API 全部是C语言函数实现, Dispatch Queue通过结构体和链表被实现为FIFO队列
什么是FIFO队列: First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。

使用范例

UIImageView *imageView = [[UIImageView alloc] init];
imageView.frame = CGRectMake(20, 20, self.view.frame.size.width - 40, self.view.frame.size.height - 40);
[self.view addSubview:imageView];    
// 使用GCD 下载图片 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
        NSString *url =@"http://images11.app.happyjuzi.com/news/201604/22/5719667646455.jpg";
        // 从网络获取数据
        NSData *data  = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
        // 将网络的数据初始化UIImage 对象
        UIImage *image = [[UIImage alloc] initWithData:data];
        if (image != nil) {
            // 该代码块将会有主线程完成
            dispatch_async(dispatch_get_main_queue(), ^{
                imageView.image = image;
            }); // 使用异步更新界面的UI控件
        }else{
            NSLog(@"错误");
        }
    });

带你系统学习GCD(三)

标签:

原文地址:http://blog.csdn.net/sinat_30162391/article/details/51399876

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!