你的位置:首页 > 操作系统

[操作系统]iOS开发之GCD使用


iOS开发之GCD使用

(1)使用GCD创建一个异步任务

#pragma mark - 使用GCD创建一个异步任务- (void)createAsyncTask{  //创建一个异步任务  //参数1:传入queue,有3种queue  //main queue 主队列(UI主线程)  //global queue 全局队列(理解为工作线程)  //自定义queue  dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  dispatch_async(queue, ^{    for (int i=0; i<20; i++) {      NSLog(@"A = %d",i);    }  });  dispatch_async(queue, ^{    for (int i=0; i<20; i++) {      NSLog(@"B = %d",i);    }  });  }

 

(2)模拟网络下载

#pragma mark - 模拟网络下载- (void)simulateNetwordDownload{  _progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(10, 100, 300, 20)];  [self.view addSubview:_progressView];    //GCD最简单开启异步任务的形式  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    for (int i=0; i<100; i++) {      //子线程中不能直接更新UI//      progressView.progress+=0.01;      //(1)更新UI dispatch_get_main_queue() 作用:切回主线程更新UI      dispatch_async(dispatch_get_main_queue(), ^{          _progressView.progress+=0.01;      });            [NSThread sleepForTimeInterval:0.1];    }        //(2)最后显示对话框    dispatch_async(dispatch_get_main_queue(), ^{      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"下载完成" delegate:self cancelButtonTitle:@"取消" otherButtonTitles: nil];      [alert show];    });    //(1)(2)同步执行,先(1)后(2)  });    }

 

(3)只执行一次,实现单例(推荐实现的方式,线程安全)

#pragma mark - 只执行一次,实现单例(推荐实现的方式,线程安全)- (void)runOnce{  static dispatch_once_t onceToken;  dispatch_once(&onceToken, ^{    NSLog(@"只执行一次的代码");  });}

 

(4)延时执行

#pragma mark - 延时执行- (void)delayRun{    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{    NSLog(@"1111111");  });}

 

(5)通知同时异步执行多个任务,等待所有任务下载完成进行处理(类似迅雷)

#pragma mark - 通知执行多个任务,等待所有任务下载完成进行处理(类似迅雷)- (void)groupRun{  //group 任务组  dispatch_group_t group = dispatch_group_create();    //7s完成  dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    for (int i=0; i<100; i++) {      NSLog(@"A = %d",i);      [NSThread sleepForTimeInterval:0.07];    }  });  //5s完成  dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    for (int i=0; i<100; i++) {      NSLog(@"B = %d",i);      [NSThread sleepForTimeInterval:0.05];    }  });  //10s完成  dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    for (int i=0; i<100; i++) {      NSLog(@"C = %d",i);      [NSThread sleepForTimeInterval:0.1];    }  });    dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    NSLog(@"所有任务完成,自动关机");  });}

 




西藏旅游住哪里比较方便西藏旅游住宿攻略西藏旅游最佳时间西藏自驾游最佳路线西藏旅游多少钱深圳欢乐谷有什么好玩的_深圳欢乐谷地图 洛阳桥在哪_泉州洛阳桥在哪里_洛阳桥位于 北京欢乐谷地址_北京欢乐谷在什么地方_北京欢乐谷在哪_北京欢乐谷在哪里 北京欢乐谷图片 生态游走 云中天堂南迦巴瓦峰 马尔代夫浮潜要注意些什么 安义:手工粉 借母亲节全家同游_带妈妈出游性价比高 潍坊水上乐园项目有哪些?潍坊富华水上乐园有什么好玩的? 2015杭州大学生旅游节学生是半价优惠吗?杭州大学生旅游节2015优惠政策? 潍坊有没有水上乐园?潍坊水上乐园在哪里? 江南大峡谷漂流门票2015-5-7月临海江南大峡谷漂流门票价格 2015深圳动漫灯会在哪里举办?深圳灯会活动什么时候举行? 2015深圳欢乐海岸跨年狂欢新亮点?欢乐海岸水秀表演新年烟花美吗? 深圳欢乐海岸2015新年狂欢几点开始?欢乐海岸水秀表演12月活动介绍? 2015深圳欢乐海岸圣诞元旦有什么活动?欢乐海岸水秀表演新年门票免费吗? 2SK2889(Q) Datasheet 2SK2889(Q) Datasheet AOT10N60 Datasheet AOT10N60 Datasheet IXFP10N60P Datasheet IXFP10N60P Datasheet 地王大厦门票 地王大厦门票 地王大厦门票 怎么去丽江 怎么去丽江 怎么去丽江 深圳地王大厦图片 深圳地王大厦图片 深圳地王大厦图片