iPhone多线程(GCD)三

本文详细介绍了GCD在iOS开发中的应用,包括主队列、全局队列和自定义队列的使用方法,以及如何通过异步连接获取图片并在主线程中显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.GCD(Grand Central Dispatch)
1.GCD提供分派队列dispatch queue,管理并分派任务,先进先出,先执行
2.队列分为3种类型
(1)主队列
   任务执行的线程:主线程
          分派任务的方式:串型队列(每个任务必须等待前一个任务执行过后   才可以执行)
(2)全局队列
  任务执行的线程:子线程
 分派任务的方式:并行队列(每个任务按顺序排发,但不需要等待前一个任务完成)
(3)自定义队列(自己创建)
  任务执行的线程:子线程
 分派任务的方式:串行和并行

以下是全局队列:
//获取全局队列,添加任务.这个任务有全局队列创建子线程,开启执行
    dispatch_queue_t globalQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    //异步连接方法
    dispatch_async(globalQueue, ^{
        //这个block在执行是,是在子线程中
        //建立同步连接获取图片
         NSLog(@"%d",[NSThread isMainThread]);
        NSString * string = @"http://b.zol-img.com.cn/desk/bizhi/image/4/1024x768/1384831595796.jpg";
        NSURL * url = [NSURL URLWithString:string];
         //建立同步连接现在图片
        NSData * data = [NSData dataWithContentsOfURL:url];
        //图像获取成功后将图片显示在UI上,(这个任务必须在主线程中完成)
         //找主队列(添加任务)
        dispatch_async(dispatch_get_main_queue(), ^{
            UIImage * image = [UIImage imageWithData:data];
            _iamge.image = image;
             NSLog(@"%d",[NSThread isMainThread]);
        });
       
    });
    

以下是自定义队列:

    //创建queue,设置为并行模式
    dispatch_queue_t myConcurrentQueue = dispatch_queue_create("com.lanou.GCD.myConcurrentQueue", DISPATCH_QUEUE_CONCURRENT);
    //添加任务
    dispatch_async(myConcurrentQueue, ^{
        //这个block在执行是,是在子线程中
        //建立同步连接获取图片
        NSLog(@"%d",[NSThread isMainThread]);
        NSString * string = @"http://b.zol-img.com.cn/desk/bizhi/image/4/1024x768/1384831595796.jpg";
        NSURL * url = [NSURL URLWithString:string];
        //建立同步连接现在图片
        NSData * data = [NSData dataWithContentsOfURL:url];
        //图像获取成功后将图片显示在UI上,(这个任务必须在主线程中完成)
        //找主队列(添加任务)
        dispatch_async(dispatch_get_main_queue(), ^{
            UIImage * image = [UIImage imageWithData:data];
            _iamge.image = image;
            NSLog(@"%d",[NSThread isMainThread]);
             });
        });
        
    
    dispatch_release(myConcurrentQueue);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值