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

首頁 > 系統 > iOS > 正文

詳解iOS多線程GCD的使用

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

Grand Central Dispatch(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;}

以上內容是小編給大家介紹的IOS中GCD的使用,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲无线码在线一区| 亚洲xxx自由成熟| 神马久久久久久| 亚洲天堂av在线播放| 久久久欧美精品| 久久精品国产2020观看福利| 国产精品久久久久影院日本| 亚洲一区制服诱惑| 亚洲跨种族黑人xxx| 日韩精品在线看| 国产精品久久久久999| 国内揄拍国内精品| 欧美性猛交xxxx黑人猛交| 国产精品激情自拍| 国产精品三级久久久久久电影| 日韩在线播放一区| 蜜月aⅴ免费一区二区三区| 日韩精品中文字幕在线观看| 国产欧美精品日韩| 伊人一区二区三区久久精品| 亚洲激情视频在线观看| 国产成人精品一区二区在线| 综合国产在线观看| 亚洲国产私拍精品国模在线观看| 国产精品美乳一区二区免费| 亚洲永久在线观看| 亚洲天堂av在线播放| 欧美丝袜第一区| 成人情趣片在线观看免费| 欧美一区亚洲一区| 亚洲3p在线观看| 北条麻妃久久精品| 91国偷自产一区二区三区的观看方式| 色视频www在线播放国产成人| 中文字幕一区二区精品| 一区二区三区 在线观看视| 久久黄色av网站| 日韩美女视频免费看| 欧美老女人性视频| 日本韩国欧美精品大片卡二| 91免费欧美精品| 国产成人免费av电影| 91美女福利视频高清| 欧美一区二区三区精品电影| 国产精品丝袜视频| 国内精品美女av在线播放| 国产精品久久久久久久久久新婚| 亚洲免费视频一区二区| 精品久久久久久国产91| 日韩美女在线观看一区| 91色视频在线导航| 国产美女91呻吟求| 福利视频一区二区| 国产精品三级久久久久久电影| 欧美激情视频一区二区| 欧美福利视频在线观看| 国产精品户外野外| 国产亚洲精品成人av久久ww| 亚洲免费视频观看| 国产欧美日韩免费| 久久99精品久久久久久青青91| 国产精品久久一区| 日韩美女毛茸茸| 日韩一区视频在线| 久久人人爽人人| 欧美性猛交xxxx乱大交极品| 亚洲色图第一页| 亚洲直播在线一区| 欧美性猛交xxxx免费看| 亚洲欧美日韩一区二区在线| 国产精品麻豆va在线播放| 久久久999国产| 久久精品夜夜夜夜夜久久| 亚洲aⅴ日韩av电影在线观看| 国产精品第七影院| 亚洲电影免费观看高清| 黑人巨大精品欧美一区二区免费| 青草青草久热精品视频在线观看| 亚洲一区中文字幕在线观看| 亚洲精品福利在线| 久久深夜福利免费观看| 国产欧美精品一区二区三区-老狼| 日韩国产在线播放| 亚洲成人精品久久| 琪琪亚洲精品午夜在线| 久久精品国产清自在天天线| 欧美激情综合色| 久久精品国产91精品亚洲| 国产成人精品在线播放| 亚洲欧美在线免费观看| 亚洲欧美一区二区激情| 一区二区三区四区精品| 91亚洲国产成人久久精品网站| 国产精品中文字幕在线| 一本大道亚洲视频| 精品中文字幕在线观看| 91丝袜美腿美女视频网站| 国产精品视频永久免费播放| 国产精品1区2区在线观看| 中文字幕国产精品| 欧美一级高清免费| 欧洲成人免费视频| 欧美日韩在线一区| 欧美成人午夜剧场免费观看| 欧美性生交大片免费| 欧美激情极品视频| 欧美黑人巨大精品一区二区| 久久成人精品视频| 粉嫩老牛aⅴ一区二区三区| 国产精品亚洲精品| 激情懂色av一区av二区av| 精品视频在线播放色网色视频| 色诱女教师一区二区三区| 亚洲精品乱码久久久久久金桔影视| 国产99视频在线观看| 国产日韩欧美电影在线观看| 亚洲va国产va天堂va久久| 成人精品一区二区三区电影黑人| 在线观看精品自拍私拍| 成人精品网站在线观看| 中文字幕亚洲情99在线| 精品国产一区二区三区久久久狼| 国产精品网站大全| 亚洲人成亚洲人成在线观看| 国产精品久久久久久亚洲影视| 亚洲国产精品久久91精品| 久久在线视频在线| 久久久久久久国产精品| 久久精品中文字幕电影| 日韩经典第一页| 色妞一区二区三区| www.日本久久久久com.| 97视频在线观看免费高清完整版在线观看| 久久久免费观看| 中文字幕一区二区精品| 亚洲欧美国产高清va在线播| 亚洲福利视频免费观看| 日韩亚洲欧美中文高清在线| 国产91精品不卡视频| 亚洲综合一区二区不卡| 一本大道亚洲视频| 国产欧亚日韩视频| 日本久久久久亚洲中字幕| 国产亚洲精品久久久久久777| 国内精品久久影院| 欧美激情免费在线| 国产乱肥老妇国产一区二| 91精品久久久久久久久久久久久久| 在线观看久久av| 国产精品视频一区二区三区四| 欧美黑人xxxⅹ高潮交| 国内精品一区二区三区| 国自在线精品视频| 91极品女神在线| 欧美另类xxx| 中文字幕亚洲专区| 亚洲电影免费观看高清完整版在线观看| 久久国产精品偷| 美女啪啪无遮挡免费久久网站| 欧美韩国理论所午夜片917电影| 亚洲综合在线做性| 高清视频欧美一级| 日韩大片在线观看视频| 欧美日韩ab片|