[IOS] ASIHttpRequest库使用过程中发现的几个小问题
在IOS开发过程中,ASIHttpRequest库是最常用的网络库,功能强大,使用也非常方便。
但是,在使用此库过程中,发现有几点小问题。网络上仔细搜索研究了好久,现记录于此。
问题1:
一个问题是,我发现当异步请求比较多,并发连接数量比较多的时候,会导致一些请求失败。
原因:
代码默认是最大4个并发连接,其他的连接需要等待。然后如果有连接请求完毕了,就会去复用这个连接,但是还会出现连接关闭的情况,这个时候代码不会再一次重新请求,导致这次请求失败,返回nil。
简单解决:
最简单的解决就是把复用连接关闭,每次都新建连接就不会出问题。或者一次只允许一个连接。
ASIHttpRequest里加入下面代码 [self setShouldAttemptPersistentConnection:NO];
问题2:
另一个问题是偶尔出现异常,在ASIHTTPRequest的startAsynchronous调用后偶尔出现EXC_BAD_ACCESS异常。
在ViewController中是采用委托的方式,即在- (void)viewDidLoad方法中加入代码:[request setDelegate:self]
然后实现其委托方法- (void)requestFinished:(ASIHTTPRequest *)request和- (void)requestFailed:(ASIHTTPRequest *)request
测试过程中发现,在执行请求未结束时候不断关闭和打开此界面,就容易出现EXC_BAD_ACCESS异常。
解决方法:
在stackoverflow.com上,有网友提出了两个解决方法。
第一个,使用同一的delegate,并且应用一运行就初始化它。如果其他类要调用异步请求,将delegate发过去。
调用方法如下:
- (void)sendUrl: (NSString *) restUrl withCallBack:(NSObject*) delegate;
然后,在delegate的实现方法中利用request的tag来标识来自哪一个类的异步调用。
第二个,使用block直接实现异步请求,抛弃delegate。
使用"setCompletionBlock:^"代替delegate的"setDidFinishSelector"。
request做一个设置就可以,比原来通过设置request.delegate再实现delegate的方法简单多了。
[request setCompletionBlock :^{
// 请求响应结束,返回 responseString
NSString *responseString = [request responseString ]; // 对于 2 进制数据,使用 NSData 返回 NSData *responseData = [request responseData];
NSLog ( @"%@" ,responseString);
}];
[request setFailedBlock :^{
// 请求响应失败,返回错误信息
NSError *error = [request error ];
NSLog ( @"error:%@" ,[error userInfo ]);
}];
相关推荐
ASIHTTPRequest是简单易用的,它封装了...它是用Objective-C编写的,可以在MAC OS X和iPhone应用中使用。 它适用于执行基本的HTTP请求和互动(或者说是反馈)。ASIFormDataRequest子类可以简单的实现提交数据和文件。
iOS ASIHttpRequest 请求https
ASIHttpRequest 库中文手册,里面提供了一些很简单的例子。
ios开发框架 ASIHttpRequest 资源来源于网上 非原创
ASIHttpRequest库是iphone下一个http网络访问的第三方库,该库主要是用core sevice开发的。这本文档完整的介绍了ASIHttpRequest库的用法,对于想使用该库开发的人,这是一个不可多得的资料。
IOS开发之如何使用第三方库ASIHTTPRequest.pdf
基于Phonegap的ASIHttpRequest库,修改了ASIHttpRequest库中的部分代码。
使用iOS SDK中的HTTP网络请求API,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,
1.改良版的 ASIHTTPRequest 不建议iOS 新手使用 2.有一定的iOS经验你会发现这个版本挺不错的! 谨慎使用,派别之争的 就别喷了无意义!
该demo最主要的功能是在用ASIHttpRequest 下载,(当然同样也适用于上传),在弹出的alert框中显示下载(或是上传数据)的进度 在这里注意:如果是下载较大的文件,进度条会缓慢进行;相反如果下载的文件很小,那...
[word]ios的ASIHTTPRequest学习.zip
ASIHTTPRequest,用于获取下载及其相关处理与应用的功能函数
IOS基于ASIHttpRequest的封装,使用单例模式断点续传,只需传入要下载的url,即可返回一定时间内的下载进度,错误回调等
ASIHTTPRequest使用介绍
ASI-HTTP-Request是通过CFNetwork API访问Web服务的一个开源封装类库包,使用Objective-C编写,非常易用,可以应用于iPhone和Mac OS X应用程序。 ASIHTTPRequest使用REST格式与Web服务进行通信,既支持基本的Http...
下载的数据,可存储到内存中或直接存储到磁盘中 能上传本地文件到服务端 可以方便的访问和操作请求和返回的Http头信息 可以获取到上传或下载的进度信息,为应用程序提供更好的体验 支持上传或下载队列,并且可获取...
使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,ASIHTTPRequest 就是一个对 CFNetwork API 进行了封装,并且使用起来非常简单的一套 API,外号 “HTTP终结者”,用 Objective-C 编写,运行效率很高...