GCD函数dispatch_async的小妙用

dispatch_async经常应用于我们日常开发中,一提到dispatch_async我们想到的是多线程或者异步执行,但这个小技巧并不是和多线程或者异步执行相关的。
你有没有在开发中遇到这种情况:你需要执行一段代码,但是代码执行的所需要的数据或者环境没有达到要求,只能在当前数据配置完成后再执行。这个时候我们通常的做法是:
//[self doSomething]; 需要执行的代码 [self performSelector:@selector(doSomething) withObject:nil afterDelay:0.1f];
这个方法是在0.1秒后执行,一般情况下设置充足的时间,来满足数据加载和环境配置的完成在代码运行方面来说是可行的。但是在某些代码强迫症人眼里,设置的延迟时间你怎么就能保证环境配置就一定能达到。
巧妙的利用dispatch_async函数就能达到完美的效果:
dispatch_async(dispatch_get_main_queue(),^{ [self doSomething]; });
前提条件是[self doSomething]必须是需要在主线程执行的代码,有人或许会问,本来[self doSomething]就是在主线程执行,为什么还要加这个函数呢,这是里用GCD队列的一个特性,主线程的任务队列,会依次执行,执行完这一个再去执行下一个。利用这个特点就可以避免上面设置延迟执行所带来的不确定性。

推荐阅读更多精彩内容