取消同步的ASIHTTPRequest请求

时间:2016-04-21 09:32:00
【文件属性】:

文件名称:取消同步的ASIHTTPRequest请求

文件大小:235KB

文件格式:ZIP

更新时间:2016-04-21 09:32:00

synchronous cancel

在网络访问时,一般都建议用异步访问,但是异步访问的话,需要传入delegate,并处理回调。不利于将所有的网络访问的方法集中到一个类中,所以我采用同步访问的方式。后来产品部们要求网络访问可以取消,但是ASIHTTP 官方文档中说同步请求是不能取消的。经过深入研究后发现新版的ASIHTTP中,同步请求实际是可以cancel的 。 检查ASIHTTPRequest类的startSynchronous方法,注意下面这段代码, if (![self isCancelled] && ![self complete]) { [self main]; while (!complete) { [[NSRunLoop currentRunLoop] runMode:[self runLoopMode] beforeDate:[NSDate distantFuture]]; } } 可以看到,在执行[self main]后,执行了个包含NSRunLoop的while循环,此循环应该就是在等待数据访问结束, 以使同步请求也可取消。while循环这段代码在旧版中是没有的。


【文件预览】:
TestCancelASIHttp
----TestCancelASIHttp()
--------TestCancelASIHttp-Info.plist(1KB)
--------en.lproj()
--------GYPAppDelegate.h(373B)
--------Default-568h@2x.png(18KB)
--------NetService.m(3KB)
--------NetService.h(446B)
--------main.m(339B)
--------Default@2x.png(16KB)
--------Default.png(6KB)
--------TestCancelASIHttp-Prefix.pch(337B)
--------GYPViewController.m(2KB)
--------GYPViewController.h(263B)
--------GlobalNetIndicatorView.h(318B)
--------GYPAppDelegate.m(617B)
--------GlobalNetIndicatorView.m(5KB)
----ASIHTTPRequest()
--------ASIHTTPRequestConfig.h(944B)
--------ASIFormDataRequest.m(11KB)
--------ASIAuthenticationDialog.m(16KB)
--------ASIDataCompressor.m(7KB)
--------ASIDownloadCache.h(2KB)
--------ASINSStringAdditions.h(324B)
--------ASIDownloadCache.m(16KB)
--------ASIAuthenticationDialog.h(1KB)
--------ASIDataDecompressor.h(2KB)
--------.svn()
--------ASINetworkQueue.h(5KB)
--------ASIHTTPRequest.h(43KB)
--------ASIInputStream.h(969B)
--------ASIHTTPRequest.m(161KB)
--------ASINSStringAdditions.m(732B)
--------Reachability.m(23KB)
--------ASICacheDelegate.h(4KB)
--------ASINetworkQueue.m(11KB)
--------ASIFormDataRequest.h(3KB)
--------ASIDataCompressor.h(2KB)
--------ASIDataDecompressor.m(6KB)
--------ASIHTTPRequestDelegate.h(2KB)
--------ASIProgressDelegate.h(2KB)
--------ASIInputStream.m(3KB)
--------Reachability.h(7KB)
----TestCancelASIHttp.xcodeproj()
--------project.xcworkspace()
--------project.pbxproj(24KB)
--------xcuserdata()
----.DS_Store(6KB)

网友评论

  • 不错,可以用
  • 很有用验证了我之前的想法,非常尊重实现的人
  • 很靠谱的代码,正需要同步的取消
  • 不错,解决问题了
  • 不错,这个可以好用
  • 不错,真的非常有用
  • 不错,可以取消同步请求.研究研究