FBRunLoopSpinner神器

Runloop介绍
http://www.cnblogs.com/tangbinblog/archive/2012/12/07/2807088.html

巧妙使用block

+ (void)spinUntilCompletion:(void (^)(void(^completion)()))block
{
  __block volatile atomic_bool didFinish = false;
  block(^{
    atomic_fetch_or(&didFinish, true);//先返回didFinish,再修改didFinish
  });
  while (!atomic_fetch_and(&didFinish, false)) {
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:FBWaitInterval]];
  }
}
  • atomic_fetch_or原子操作bool值,或
  • atomic_fetch_and原子操作bool值,与,先返回本身值做判断

执行完block操作,在block中调用completion,didFinish值为true,则runloop停止,否则while循环一直监听didFinish值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容