刀哥多线程现操作gcd-10-delay】的更多相关文章

延迟操作 // MARK: - 延迟执行 - (void)delay { /** 从现在开始,经过多少纳秒,由"队列"调度异步执行 block 中的代码 参数 1. when 从现在开始,经过多少纳秒 2. queue 队列 3. block 异步执行的任务 */ dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)); void (^task)() = ^ { NSL…
GCD GCD 核心概念 将任务添加到队列,并且指定执行任务的函数 任务使用 block 封装 任务的 block 没有参数也没有返回值 执行任务的函数 异步 dispatch_async 不用等待当前语句执行完毕,就可以执行下一条语句 会开启线程执行 block 的任务 异步是多线程的代名词 同步 dispatch_sync 必须等待当前语句执行完毕,才会执行下一条语句 不会开启线程 在当前执行 block 的任务 队列 - 负责调度任务 串行队列 一次只能"调度"一个任务 disp…
一次性执行 有的时候,在程序开发中,有些代码只想从程序启动就只执行一次,典型的应用场景就是"单例" // MARK: 一次性执行 - (void)once { static dispatch_once_t onceToken; NSLog(@"%ld", onceToken); dispatch_once(&onceToken, ^{ [NSThread sleepForTimeInterval:1.0]; NSLog(@"一次性吗?")…
全局队列 是系统为了方便程序员开发提供的,其工作表现与并发队列一致 全局队列 & 并发队列的区别 全局队列 没有名称 无论 MRC & ARC 都不需要考虑释放 日常开发中,建议使用"全局队列" 并发队列 有名字,和 NSThread 的 name 属性作用类似 如果在 MRC 开发时,需要使用 dispatch_release(q); 释放相应的对象 dispatch_barrier 必须使用自定义的并发队列 开发第三方框架时,建议使用并发队列 全局队列 异步任务 /…
Barrier 异步 主要用于在多个异步操作完成之后,统一对非线程安全的对象进行更新 适合于大规模的 I/O 操作 代码演练 准备工作 @interface ViewController () { // 加载照片队列 dispatch_queue_t _photoQueue; } @property (nonatomic, strong) NSMutableArray *photoList; @end - (NSMutableArray *)photoList { if (_photoList…
block 概念 block 是 C 语言的 是一种数据类型,可以当作参数传递 是一组预先准备好的代码,在需要的时候执行 动画 block 回顾 self.demoView.center = CGPointMake(self.view.center.x, 0); // 此方法会立即执行动画 block [UIView animateWithDuration:2.0 delay:0 usingSpringWithDamping:0.3 initialSpringVelocity:10 option…
主队列 特点 专门用来在主线程上调度任务的队列 不会开启线程 以先进先出的方式,在主线程空闲时才会调度队列中的任务在主线程执行 如果当前主线程正在有任务执行,那么无论主队列中当前被添加了什么任务,都不会被调度 队列获取 主队列是负责在主线程调度任务的 会随着程序启动一起创建 主队列只需要获取不用创建 dispatch_queue_t queue = dispatch_get_main_queue(); 主队列演练 主队列,异步执行 - (void)touchesBegan:(NSSet *)to…
并发队列 特点 以先进先出的方式,并发调度队列中的任务执行 如果当前调度的任务是同步执行的,会等待任务执行完成后,再调度后续的任务 如果当前调度的任务是异步执行的,同时底层线程池有可用的线程资源,会再新的线程调度后续任务的执行 队列创建 dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue", DISPATCH_QUEUE_CONCURRENT); 并发队列演练 并发队列 异步执行 /** 提问:是否开线程?…
串行队列 特点 以先进先出的方式,顺序调度队列中的任务执行 无论队列中所指定的执行任务函数是同步还是异步,都会等待前一个任务执行完成后,再调度后面的任务 队列创建 dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue", DISPATCH_QUEUE_SERIAL); dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue&…
调度组 常规用法 - (void)group1 { // 1. 调度组 dispatch_group_t group = dispatch_group_create(); // 2. 队列 dispatch_queue_t q = dispatch_get_global_queue(0, 0); // 3. 将任务添加到队列和调度组 dispatch_group_async(group, q, ^{ [NSThread sleepForTimeInterval:1.0]; NSLog(@"任务…