iOS怎样发送同步和异步HTTP Request

iOS怎样发送同步和异步HTTP Request,第1张

您好,苹果官方提供了一套完整的发送HTTPRequest的方法,需要发起网络请求的类遵守名为

NSURLConnectionDataDelegate的协议,但是这种方法繁琐,且采用分段加载的伪异步方式进行加载,效率不仅不高,而且费时费力,因此发起网络请求时一般使用名为ASIHTTPRequest的第三方类库。

我附件中给您共享了ASIHTTPRequest的库文件和使用方式,当您发起请求的时候,需要遵守ASIHTTPRequestDelegate,然后只需要建立一个名为ASIHTTPRequest类的对象,设置好接口的URL地址后,即可通过以下两个方法开始发送同步或异步请求

//_asi是一个已经实例化的ASIHTTPRequest对象

      [_asi startAsynchronous]//异步请求

      [_asi startSynchronous]//同步请求

之后就可以在协议中定义的方法进行对数据的解码 *** 作了

-(void)requestFinished:(ASIHTTPRequest *)request{}//协议定义的类方法,当接收到全部数据的时候执行,一般在这个方法中进行数据的解码 *** 作

同步请求和异步请求相比来说,一般都用异步请求,这是由于同步请求执行的时候,程序是暂停的,影响效率和用户体验,而异步请求是在后台执行的

曾遇到的问题:封装SDK中的某个接口时需要上传地理位置,而获取地理位置与网络请求是个异步 *** 作,也就是说当地理位置拿到的慢一些时,上传的地理位置会为空。

解决:在网络请求之前用下面方法让线程等待

-( void )waitObject

{

    NSRunLoop*runLoop = [NSRunLoopcurrentRunLoop]

    isStart= TRUE

    while (isStart== TRUE ){

        @autoreleasepool {

            [runLooprunMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]

        }

    }

}

当在地理位置回调后 将isStart变量置为FALSE,退出runloop接着就可以同步执行网络请求的 *** 作了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6648715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存