亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS多線程GCD問題

2020-07-26 03:03:55
字體:
來源:轉載
供稿:網友

在iOS所有實現多線程的方案中,GCD應該是最有魅力的,因為GCD本身是蘋果公司為多核的并行運算提出的解決方案。GCD在工作時會自動利用更多的處理器核心,以充分利用更強大的機器。GCD是Grand Central Dispatch的簡稱,它是基于C語言的。如果使用GCD,完全由系統管理線程,我們不需要編寫線程代碼。只需定義想要執行的任務,然后添加到適當的調度隊列(dispatch queue)。GCD會負責創建線程和調度你的任務,系統直接提供線程管理

dispatch queue分成以下三種:

1)運行在主線程的Main queue,通過dispatch_get_main_queue獲取。

/*!* @function dispatch_get_main_queue** @abstract* Returns the default queue that is bound to the main thread.** @discussion* In order to invoke blocks submitted to the main queue, the application must* call dispatch_main(), NSApplicationMain(), or use a CFRunLoop on the main* thread.** @result* Returns the main queue. This queue is created automatically on behalf of* the main thread before main() is called.*/__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)DISPATCH_EXPORT struct dispatch_queue_s _dispatch_main_q;#define dispatch_get_main_queue() /DISPATCH_GLOBAL_OBJECT(dispatch_queue_t, _dispatch_main_q)

可以看出,dispatch_get_main_queue也是一種dispatch_queue_t。

2)并行隊列global dispatch queue,通過dispatch_get_global_queue獲取,由系統創建三個不同優先級的dispatch queue。并行隊列的執行順序與其加入隊列的順序相同。

3)串行隊列serial queues一般用于按順序同步訪問,可創建任意數量的串行隊列,各個串行隊列之間是并發的。

當想要任務按照某一個特定的順序執行時,串行隊列是很有用的。串行隊列在同一個時間只執行一個任務。我們可以使用串行隊列代替鎖去保護共享的數據。和鎖不同,一個串行隊列可以保證任務在一個可預知的順序下執行。

serial queues通過dispatch_queue_create創建,可以使用函數dispatch_retain和dispatch_release去增加或者減少引用計數。

GCD的用法:

// 后臺執行: dispatch_async(dispatch_get_global_queue(0, 0), ^{   // something }); // 主線程執行: dispatch_async(dispatch_get_main_queue(), ^{   // something }); // 一次性執行: static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{   // code to be executed once }); // 延遲2秒執行: double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){   // code to be executed on the main queue after delay }); // 自定義dispatch_queue_t dispatch_queue_t urls_queue = dispatch_queue_create("blog.devtang.com", NULL); dispatch_async(urls_queue, ^{    // your code  }); dispatch_release(urls_queue); // 合并匯總結果 dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{   // 并行執行的線程一 }); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{   // 并行執行的線程二 }); dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{   // 匯總結果 });

 一個應用GCD的例子:

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];    NSError * error;    NSString * data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];    if (data != nil) {      dispatch_async(dispatch_get_main_queue(), ^{        NSLog(@"call back, the data is: %@", data);      });    } else {      NSLog(@"error when download:%@", error);    }  });

GCD的另一個用處是可以讓程序在后臺較長久的運行。

在沒有使用GCD時,當app被按home鍵退出后,app僅有最多5秒鐘的時候做一些保存或清理資源的工作。但是在使用GCD后,app最多有10分鐘的時間在后臺長久運行。這個時間可以用來做清理本地緩存,發送統計數據等工作。

讓程序在后臺長久運行的示例代碼如下:

// AppDelegate.h文件@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;// AppDelegate.m文件- (void)applicationDidEnterBackground:(UIApplication *)application{  [self beingBackgroundUpdateTask];  // 在這里加上你需要長久運行的代碼  [self endBackgroundUpdateTask];}- (void)beingBackgroundUpdateTask{  self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{    [self endBackgroundUpdateTask];  }];}- (void)endBackgroundUpdateTask{  [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];  self.backgroundUpdateTask = UIBackgroundTaskInvalid;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产一区二区三区| 亚洲自拍高清视频网站| 91麻豆桃色免费看| 97久久伊人激情网| 深夜福利亚洲导航| 影音先锋欧美在线资源| 神马国产精品影院av| 久久亚洲影音av资源网| 久久久亚洲国产| 亚洲国产成人久久综合| 国产免费一区二区三区在线能观看| 久久久伊人日本| 黑人巨大精品欧美一区二区| 97av在线视频免费播放| 久久久久久亚洲| 另类色图亚洲色图| 欧美三级欧美成人高清www| 欧美激情亚洲一区| 欧美二区在线播放| 久久精品视频网站| 性欧美暴力猛交69hd| 成人97在线观看视频| 亚洲在线免费观看| 国产97在线视频| 黑人精品xxx一区一二区| 麻豆成人在线看| 热门国产精品亚洲第一区在线| 久久天堂av综合合色| 欧美日韩免费在线| 成人欧美一区二区三区在线| 亚洲精品丝袜日韩| 国产精品久久久久久婷婷天堂| 97精品视频在线观看| 亚洲免费伊人电影在线观看av| 国产视频精品va久久久久久| 亚洲天堂开心观看| 日韩毛片在线观看| 日韩中文字幕av| 亚洲国产91色在线| 国产精品1234| 欧美激情视频免费观看| 亚洲精品色婷婷福利天堂| 欧美激情在线观看视频| 91精品91久久久久久| 国产成人aa精品一区在线播放| 91在线精品播放| 亚洲精品国产suv| 91精品国产综合久久久久久蜜臀| 久热精品视频在线观看一区| 国产精品自拍视频| 亚洲精品自拍视频| 久久精品久久久久电影| 午夜剧场成人观在线视频免费观看| 欧美一级淫片播放口| 国产aⅴ夜夜欢一区二区三区| 国产福利视频一区| 色偷偷av一区二区三区乱| 国产精品第七影院| 亚洲有声小说3d| 欧美日韩精品二区| 亚洲国产精品久久91精品| 亚洲毛片一区二区| 伊人av综合网| 成人免费直播live| 日本在线观看天堂男亚洲| 国产成人精品a视频一区www| 91av国产在线| 欧美精品一区三区| 亚洲最大的成人网| 91影视免费在线观看| 日韩激情在线视频| 国产99久久精品一区二区 夜夜躁日日躁| 成人h视频在线观看播放| 国产亚洲一区二区精品| 久久久免费观看视频| 九九九热精品免费视频观看网站| 午夜精品久久久久久久99热浪潮| 久热精品视频在线观看| 成人97在线观看视频| 欧美综合国产精品久久丁香| 国产日韩欧美在线视频观看| 久久久久久久亚洲精品| 国产69精品久久久久99| 久久综合国产精品台湾中文娱乐网| 爽爽爽爽爽爽爽成人免费观看| 91av免费观看91av精品在线| 亚洲女在线观看| 久精品免费视频| 国产精品丝袜久久久久久不卡| 欧美日韩成人免费| 成人免费观看49www在线观看| 国产精品白丝av嫩草影院| 亚洲一区二区在线播放| 欧美激情欧美激情在线五月| 国产亚洲欧美日韩一区二区| 这里只有精品视频在线| 欧美一区二区三区四区在线| 3344国产精品免费看| 一区二区三区在线播放欧美| 国产成人激情小视频| 伊人青青综合网站| 亚洲天堂一区二区三区| 欧美性猛交xxxx乱大交蜜桃| 琪琪第一精品导航| 91精品国产乱码久久久久久久久| 国产一区二区三区在线视频| 欧美激情伊人电影| 欧美成人三级视频网站| 欧美午夜丰满在线18影院| 亚洲成人av在线| 亚洲天堂色网站| 欧美在线影院在线视频| 亚洲天堂精品在线| 中国china体内裑精亚洲片| 日韩免费在线播放| 欧美成人sm免费视频| 91九色国产社区在线观看| 国产精品久久网| 亚洲女成人图区| 国产欧美日韩免费看aⅴ视频| 欧美性猛交xxxx乱大交极品| 国产www精品| 国内精品久久久久影院 日本资源| 国产精品精品久久久久久| 8050国产精品久久久久久| 国产精品久久久久久久午夜| 91久久精品在线| 92国产精品视频| 91av在线不卡| 欧美洲成人男女午夜视频| 亚洲已满18点击进入在线看片| 欧美黄色免费网站| 中文字幕日本欧美| 日韩中文字幕免费视频| 午夜精品久久久久久久男人的天堂| 91九色精品视频| 国产精品观看在线亚洲人成网| 国产精品老女人精品视频| 日韩在线一区二区三区免费视频| 欧美电影在线观看网站| 91国产精品电影| 久久久久久久久中文字幕| 精品综合久久久久久97| 久久久久久伊人| 97在线看免费观看视频在线观看| 亚洲国模精品私拍| 欧美成人在线影院| 久久精品久久久久久国产 免费| 美女视频黄免费的亚洲男人天堂| 国产精品免费观看在线| 亚洲影院色在线观看免费| 国产成人精品视频在线| 国产精品久久久久久久久粉嫩av| 国产精品偷伦视频免费观看国产| 91麻豆国产语对白在线观看| 欧美肥婆姓交大片| 欧美男插女视频| 欧美情侣性视频| 亚洲精品美女久久久久| 91人人爽人人爽人人精88v| 日韩成人久久久| 91精品国产高清| 国产精品成人国产乱一区| 亚洲天堂久久av|