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值,與,先返回本身值做判斷
執(zhí)行完block操作,在block中調(diào)用completion,didFinish值為true,則runloop停止,否則while循環(huán)一直監(jiān)聽didFinish值。