您好,苹果官方提供了一套完整的发送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接着就可以同步执行网络请求的 *** 作了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)