項(xiàng)目中需求,需要發(fā)起一個(gè)異步網(wǎng)絡(luò)請(qǐng)求,等待請(qǐng)求數(shù)據(jù)回來(lái)后才可以進(jìn)行之后的操作。
首先,定義一個(gè)BOOL類(lèi)型的requestEndFlag,當(dāng)網(wǎng)絡(luò)數(shù)據(jù)回來(lái)的時(shí)候?qū)ndFlag置為YES,然后將下面的代碼粘貼到網(wǎng)絡(luò)請(qǐng)求的下方即可。如果網(wǎng)絡(luò)請(qǐng)求一直沒(méi)回來(lái),你會(huì)發(fā)現(xiàn)運(yùn)行的代碼會(huì)一直在執(zhí)行卡在下面的代碼塊中,并且不會(huì)卡住UI畫(huà)面。
- (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];
}
}
}
}