iOS ● 线程 GCD

作者: MyiOS | 来源:发表于2016-08-09 13:54 被阅读82次

    GCD:比NSOperation还要底层的API,操作底层C API,效率高,使用起来也是最方便的,不需要管生命周期.

    图片异步加载:

    //先将异步下载图片的任务放到dispatch_get_global_queue全局共享并发队列中执行dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
    
    NSURL*url=[NSURLURLWithString:@"图片的URL"];
    
    UIImage*image=[UIImageimageWithData:[NSDatadataWithContentsOfURL:url]];
    
    // 下载完成后需要放在dispatch_get_main_queue回到主线程更新UI,显示图片
    
    dispatch_async(dispatch_get_main_queue(),^{
    
    self.imageView.image=image;
    
    });
    
    });
    

    使用dispatch_after方法来延迟执行某项功能:

    CGFloat time =3.0f;
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time *NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
    
    //执行的方法
    
    });
    

    如下图,接口请求完数据后菊花效果(0.5秒消失)提示保存成功,
    再经过0.7-0.5=0.2秒后返回上一个界面:


    Paste_Image.png

    创建队列、异步、同步任务添加到队列:

    
    dispatch_queue_t queue = dispatch_queue_create("baidu", NULL);
     
    dispatch_async(queue, ^{  
        NSLog(@"异步任务,当前线程为%@", [NSThread currentThread]);  
    });  
      
    dispatch_sync(queue, ^{  
        NSLog(@"同步任务,当前线程为%@", [NSThread currentThread]);  
    });  
    

    相关文章

      网友评论

        本文标题:iOS ● 线程 GCD

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