AFNetworking3.0實現(xiàn)同步請求。

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);  //等待

希望對大家有幫助。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容