AFNetworking3.0实现同步请求。

AFNetworking3.0以后,都是异步的请求,之前的同步请求的接口已经废弃了。

如下是一个3.0请求的Get方法:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
}];

有时候我们却还是需要这同步请求,单次的请求依赖倒是没有问题,可以在Block中依次执行,但是有时候是对多次请求的依赖,这时候是无法直接在Block中简单实现的,这时就迫切需要同步请求的功能。

下面是我实现的一个方法,不一定是最优的,但是我认为可以满足大部分程序场景的需求。

同步请求的实现方法:

具体的实现是,通过信号量来控制,Code如下:

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //创建信号量
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
         dispatch_semaphore_signal(semaphore);//不管请求状态是什么,都得发送信号,否则会一直卡着进程
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
         dispatch_semaphore_signal(semaphore);//不管请求状态是什么,都得发送信号,否则会一直卡着进程   
}];

dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);  //等待

希望对大家有帮助。

你可能感兴趣的:(AFNetworking3.0实现同步请求。)