iOS开发GCD的简单使用

- (void)viewDidLoad {
    [super viewDidLoad];
    
//    gcd 可以充分调用设备的 cpu 发挥最大性能,在 C 语言基础之上封装的
    
//    dispatch_queue_t开辟一个线程
//    DISPATCH_QUEUE_PRIORITY_DEFAULT设置优先级
    
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
//    在此线程里开启异步下载
    dispatch_async(queue, ^{
         UIImage * image = [self imageWithStringUrl:@"http://www.chinadaily.com.cn/hqgj/jryw/201205/f5aae8120f566b9cca8cf29791f111fd.jpg"];
        dispatch_async(dispatch_get_main_queue(), ^{
//           在主线程设置 UI 的内容,将 UI 的内容转到主线程里进行
           
            UIImageView * view = [[UIImageView alloc] initWithFrame:self.view.frame];
            view.image = image;
            [self.view addSubview:view];
            
        });
    });
    
    [self createGCDTimer];
}

-(void)createGCDTimer
{
//    dispatch_source_t是监视某些类型的事件的对象,当这些事件发生的时候,他会自动将一个 block放入dispatch_get_queue执行队列中
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
//    设置计时器的属性,每10秒触发一次,误差在1秒范围内
    dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), 0.2*NSEC_PER_SEC, 1*NSEC_PER_SEC);
    dispatch_source_set_event_handler(timer, ^{
//       在这里写定时器处理的内容
        static int i = 0;
        NSLog(@"%d",i);
        i++;
//        必须结构完整
        if (i>100) {
            dispatch_source_cancel(timer);
        }
    });
//    启动定时器
    dispatch_resume(timer);
}

-(UIImage *)imageWithStringUrl:(NSString *)str
{
    NSURL * url = [NSURL URLWithString:str];
    NSData * data = [NSData dataWithContentsOfURL:url];
    UIImage * image = [UIImage imageWithData:data];
    return image;
}

 

posted @ 2016-08-26 10:04  J-Vijay  阅读(263)  评论(0编辑  收藏  举报