项目中需求,需要发起一个异步网络请求,等待请求数据回来后才可以进行之后的操作。
首先,定义一个BOOL类型的requestEndFlag,当网络数据回来的时候将endFlag置为YES,然后将下面的代码粘贴到网络请求的下方即可。如果网络请求一直没回来,你会发现运行的代码会一直在执行卡在下面的代码块中,并且不会卡住UI画面。
- (void)waitingRequestEnd
{
if ([NSThread currentThread] == [NSThread mainThread]) {
while (!requestEndFlag) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.3]];
}
} else {
@autoreleasepool {
while (requestEndFlag) {
[NSThread sleepForTimeInterval:0.3];
}
}
}
}