多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > ios多線程 -- GCD 常見用法

ios多線程 -- GCD 常見用法

來源:程序員人生   發布時間:2016-08-04 09:14:40 閱讀次數:2644次

GCD 通訊操作

#pragma mark - GCD 通訊 - (void)sendMessage{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //耗時操作 [self downLoad:@"http://..."]; //回主隊列刷新數據 dispatch_async(dispatch_get_main_queue(), ^{ //刷新UI操作 }); }); }

延時操作
iOS常見的延時履行有2種方式
(1)調用NSObject的方法

// 2秒后再調用self的run方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0];

(2)使用GCD函數

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 2秒后異步履行這里的代碼... });

代碼演示:

#pragma mark - GCD 延遲 - (void)delayModel:(CGFloat)time{ // 經過延遲 time 秒后,回到當前線程,履行。不會卡住當前線程 // 該方法在那個線程調用,那末run就在哪一個線程履行(當前線程),通常是主線程 //[self performSelector:@selector(downLoad:) withObject:@"delayModel" afterDelay:time]; // GCD 實現 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), queue, ^{ [self downLoad:@"GCD---delayModel"]; }); }

延時操作
GCD延時操作

1次性代碼

#pragma mark - GCD 1次性代碼 - (void)onceCore{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 只履行1次的代碼(這里面默許是線程安全的) [self downLoad:@"onceCore"]; }); }

一次性代碼

隊列組

#pragma mark - GCD 隊列組 - (void)groupQueue{ // 1 獲得全局隊列 /** * 優先級 * DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高 * DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默許(中) * DISPATCH_QUEUE_PRIORITY_LOW (⑵) // 低 * DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后臺 */ dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 2 獲得隊列組 dispatch_group_t group = dispatch_group_create(); // 3 下載圖片1 //__block 修飾的值才能在 block 中改 __block UIImage *image1 = nil; dispatch_group_async(group, queue, ^{ //下載圖片 NSString *urlStr = @"http://b.hiphotos.baidu.com/image/pic/item/cdbf6c81800a19d8c58c800431fa828ba61e4627.jpg"; NSURL *url = [NSURL URLWithString:urlStr]; NSData *data = [NSData dataWithContentsOfURL:url]; image1 = [UIImage imageWithData:data]; }); // 4 下載圖片2 __block UIImage *image2 = nil; dispatch_group_async(group, queue, ^{ //下載圖片 NSString *urlStr = @"http://b.hiphotos.baidu.com/image/w%3D230/sign=fbc72e14362ac65c67056170cbf2b21d/e4dde71190ef76c666af095f9e16fdfaaf516741.jpg"; NSURL *url = [NSURL URLWithString:urlStr]; NSData *data = [NSData dataWithContentsOfURL:url]; image2 = [UIImage imageWithData:data]; }); // 5 合并圖片1, 2 dispatch_group_notify(group, queue, ^{ //獲得圖形上下文 UIGraphicsBeginImageContextWithOptions(image1.size, NO, 0.0); //繪制第1張圖片 [image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)]; //繪制第2張圖片 [image2 drawInRect:CGRectMake(0, 0, image2.size.width * 4, image2.size.height * 3)]; //得到上下文的新圖片 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); //關閉上下文 UIGraphicsEndImageContext(); //回到主線程刷新界面 dispatch_async(dispatch_get_main_queue(), ^{ self.imageView.image = newImage; }); }); }

隊列組

補充:

有這么1種需求: 首先:分別異步履行2個耗時的操作 其次:等2個異步操作都履行終了后,再回到主線程履行操作 如果想要快速高效地實現上述需求,可以斟酌用隊列組 dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 履行1個耗時的異步操作 }); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 履行1個耗時的異步操作 }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ // 等前面的異步操作都履行終了后,回到主線程... });
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美成人手机视频免费播放 | 亚洲视频一区二区在线观看 | 爆操网站 | 亚洲欧美日韩综合一区 | 欧美成人在线观看 | 久久久久久久性 | 亚洲情a成黄在线观看动 | 黄色网址中文字幕 | 欧美精品一区二区三区免费播放 | 自拍三区 | 一本大道香蕉在线高清视频 | 久久亚洲精选 | 与黑人女人做爰的真实感受 | 中文字幕资源站 | 欧美精品一区二区三区视频 | 欧美爱爱爽爽视频在线观看 | 亚洲成a人片在线播放观看国产 | 欧美国产日韩另类 | 美女福利视频一区二区 | 国产一区二区亚洲精品 | 咸片在线网站免费观看 | 精品久久久久久中文字幕一区 | 欧美区国产区 | 国产亚洲综合一区二区在线 | 精品国产一区二区三区免费看 | 日本aaaa级毛片在线看 | 成人三级精品视频在线观看 | 亚洲免费中文字幕 | 日本一二区视频 | 在线视频久久 | 最近免费中文字幕4 | 日本欧美久久久久免费播放网 | 欧美大片a一级毛片视频 | 看欧美毛片一级毛片 | 欧美日韩大尺码免费专区 | 日韩区欧美区 | 午夜免费视频网站 | 成人精品一区二区三区校园激情 | 欧美视频日韩专区午夜 | 欧美综合国产精品日韩一 | 成人中文字幕一区二区三区 |