GCD的常用用法总结

//1、创建主线程(串行)

dispatch_async(dispatch_get_main_queue(), ^{

//刷新界面代码

});

//2、创建异步线程(并行)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

//比较耗时的代码放这里

});

//3、gcd延迟

double delayInSeconds = 1.0;

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

//延迟代码

});

//4、gcd只执行一次

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

//只执行一次代码

});

//5、有三个任务,需要异步并发执行前两个任务,前两个任务执行完成后再执行第三个任务。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

//创建组

dispatch_group_t group=dispatch_group_create();

// 关联一个任务到group

dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

//任务一

NSLog(@"******执行任务一******");

});

// 关联一个任务到group

dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

//任务二

NSLog(@"******执行任务二******");

});

// 等待组中的任务执行完毕,回到主线程执行block回调

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

//任务三

NSLog(@"******等待组中的任务执行完毕,回到主线程执行block回调,执行任务三******");

});

});

//6、dispatch_barrier_async的使用,dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

dispatch_queue_t queue = dispatch_queue_create("create_asy_queue", DISPATCH_QUEUE_CONCURRENT);

dispatch_async(queue, ^{

NSLog(@"dispatch_async1");

});

dispatch_async(queue, ^{

NSLog(@"dispatch_async2");

});

dispatch_barrier_async(queue, ^{

NSLog(@"dispatch_barrier_async");

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"刷新界面");

});

});

dispatch_async(queue, ^{

[NSThread sleepForTimeInterval:1];

NSLog(@"dispatch_async3");

});

/*7、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;

}

时间: 2024-12-10 20:13:38

GCD的常用用法总结的相关文章

log4j的常用用法

最近一段时间一直在用别人封装好,配置好的日志类记录日志,感觉挺好奇的.下面就记录一下用log4j处理日志的常用用法. 至于log4j是什么,我不清楚,暂时也觉得没必要太深入,只知道是处理日志比较好的选择. Game Starts 参考文档 1)官方pdf文档 2)配置log4j(和详细) 3)Log4j 的日志级别 依赖jar包 1)log4j-api-2.0.2.jar    2)log4j-core-2.0.2.jar [D] 主要的类 1)Logger 看名字也就知道是干什么的了,就是靠他

GCD的简单用法

/* 创建一个队列用来执行任务,TA属于系统预定义的并行队列即全局队列,目前系统预定义了四个不同运行优先级的全局队列,我们可以通过dispatch_get_global_queue来获取它们 四种优先级 DISPATCH_QUEUE_PRIORITY_HIGH DISPATCH_QUEUE_PRIORITY_DEFAULT DISPATCH_QUEUE_PRIORITY_LOW DISPATCH_QUEUE_PRIORITY_BACKGROUND 不得已情况下可用dispatch_queue_c

iOS开发多线程篇—GCD的常见用法

iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 (2)使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispat

Objective-C NSString的常用用法

//1.创建常量字符串. NSString *astring = @"This is a String!";   //2.创建空字符串,给予赋值. NSString *astring = [[NSString alloc] init]; astring = @"This is a String!"; [astring release]; NSLog(@"astring:%@",astring);//NSString *astring = [[NS

关于function的一种常用用法

关于function的一种常用用法 void Share::InitAcrossManager() { GsMgrEvent gsMgrEvents;//保存function的结构体 gsMgrEvents.fnSendData2Client = [this](int nChannelId, void* pData, int nLen)//lambda绑定,当然也可以用std::bind进行绑定 { SendCmd2C(nChannelId, s2c_prop_opt, pData, nLen)

iOS开发多线程篇 08 —GCD的常见用法

iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 (2)使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispat

linux下tar命令常用用法

tar参数列表: -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的参数是根据需要在压缩或解压档案时可选的. -z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出 下面的参数-f是必须的 -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名. 常用的命令参数有 -c,-x,-z

NSString,NSSarray的常用用法

//初始化         //iniWithString------Returns an NSString object initialized by copying the characters from another given string.        // 返回一个NSString对象初始化复制来自另一个给定字符串的字符.         NSString *str = @"liuyafang";         NSString *str1 = [[NSString 

NSDictionary常用用法

NSArray *aa = [NSArray arrayWithObjects:@"11", @"122", nil];         NSLog(@"%@", aa);         //里面只有一对键值的字典         NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"2134" forKey:@"id"];         N