AFNetworking3.0以后盛霎,都是異步的請求,之前的同步請求的接口已經(jīng)廢棄了耽装。
如下是一個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中依次執(zhí)行掉奄,但是有時候是對多次請求的依賴,這時候是無法直接在Block中簡單實現(xiàn)的,這時就迫切需要同步請求的功能姓建。
下面是我實現(xiàn)的一個方法诞仓,不一定是最優(yōu)的,但是我認為可以滿足大部分程序場景的需求速兔。
同步請求的實現(xiàn)方法:
具體的實現(xiàn)是墅拭,通過信號量來控制,Code如下:
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //創(chuàng)建信號量
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
dispatch_semaphore_signal(semaphore);//不管請求狀態(tài)是什么涣狗,都得發(fā)送信號谍婉,否則會一直卡著進程
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
dispatch_semaphore_signal(semaphore);//不管請求狀態(tài)是什么,都得發(fā)送信號镀钓,否則會一直卡著進程
}];
dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER); //等待
希望對大家有幫助穗熬。