问题描述
- ios 想问一个很简单的异步问题
- [manager POST:@""https://www.baidu.com"" parameters:@{} success:^(AFHTTPRequestOperation *operation id responseObject) {
NSLog(@""ok1"");
}
NSLog(@""ok2"");
很明显这段代码 如果打印的话 肯定是:先ok2 再ok1
有没有什么办法先ok1 再 ok2
当然不能把 NSLog(@""ok2"");这句放到异步代码块之后的情况下 达到上述要求
解决方案
异步的本身就是在需要做等待的地方不等待继续执行后面的事情,想要等待post完成再走下面的那就用同步来做啊,为什么要用异步的方式来完成同步做的事情呢?
解决方案二:
首先你问这个问题就已经违背了多线程设计的思想,使用AFNetworking来异步加载数据就是为了,防止主线程卡顿,而你要达到那种效果,就必须等数据
加载完成了返回,加载数据耗时间,导致UI卡顿。可以从你的代码看出来,你可能是烦于每次请求数据都要写AFN这么一大串的方法,你想在AFNetwork上在进行二次封装,!所以达到你的那种效果不难,只是没有实际意义了。
解决方案三:
不知道你处理过tableView的reloadData没有 那个就是等请求数据结束后 在执行reloadData 能达到你的要求
解决方案四:
[manager POST:@""https://www.baidu.com"" parameters:@{} success:^(AFHTTPRequestOperation *operation id responseObject) {
NSLog(@""ok1"");
//回调主线程
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@""ok2"");
}];
}
我懂题主的意思 就是在次线程中完成任务之后,又继续回到主线程执行任务 可以在次线程中添加一个返回到主线程的方法就 ok 啦
希望能帮到你
解决方案五:
简单点 . 在NSLog(@""ok2"") 之前加个判定 if() ...