使用AFNetworking进行同步请求

由于AFNetworking没有对网络同步请求进行封装,而又在使用中偶尔会用到,我是这种进行处理的,分享出来,希望大家有更好的建议。

dispatch_semaphore_tsemaphore =dispatch_semaphore_create(0);//创建一个信号量

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithUrlString:url];

[manager POST:urlString parameters:dic progress:nil success:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject) {

//处理代码

//在处理完成后发送信号量

dispatch_semaphore_signal(semaphore);

}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {

//处理代码

//dispatch_semaphore_signal(semaphore);

}];

//信号量等待

dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);

因为AFNetworking成功和失败的回调是在主线程进行的,如果在主线程进行这种方法的调用会造成死锁,只能在其他线程进行处理。

void dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);
在串行队列和全局队列中的作用只是dispatch_async的作用,只有在 dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
这样的队列中才能起到同步作用。

你可能感兴趣的:(使用AFNetworking进行同步请求)