dispatch_apply 作用是把指定次数指定的 block 添加到 queue 中
dispatch_queue_t queue=dispatch_get_global_queue(0, 0);
dispatch_apply(10, queue, ^(size_t index) {
NSLog(@"%zu",index);
});
NSLog(@"done");
dispatch_apply
和 dispatch_apply_f
是同步函数,会阻塞当前线程直到所有循环迭代执行完成。当提交到并发 queue 时,循环迭代的执行顺序是不确定的。
dispatch_async 任务未完成时释放对象标签:
GCD 中一个现象:在一个类中使用 dispatch_async
执行异步任务,任务未完成之前释放对象,并不能调用对象的 dealloc,而是在任务完成后才去调用 dealloc.
很常见的一个例子就是异步下载图片,图片未下载完成之前页面返回,并不会立马调用 dealloc,而是在下载完成后才去调用 dealloc.
经测试发现,当开始任务的时候 GCD 对对象添加了引用,导致对象的引用计数+1,所以释放对象时并不能真正释放,必须等任务完成后才能真正释放对象。
dispatch_queue_t含义
dispatch_queue_t 是用来执行 blocks
的对象。