iOS开发ASIHTTPRequest进度追踪
2014-09-23 14:49
417 查看
本文为大家介绍了发ASIHTTPRequest进度追踪的内容,其中包括追踪单个request的下载进度,追踪一系列request的下载进度,追踪单个request的上传进度,追踪一系列request的上传进度,精确进度条vs简单进度条,自定义进度追踪等等内容。
AD:2014WOT全球软件技术峰会北京站 课程视频发布
本文为大家介绍了发ASIHTTPRequest进度追踪的内容,其中包括追踪单个request的下载进度,追踪一系列request的下载进度,追踪单个request的上传进度,追踪一系列request的上传进度,精确进度条vs简单进度条,自定义进度追踪等等内容。
每个ASIHTTPRequest有两个delegate用来追踪进度:
downloadProgressDelegate (下载) 和 uploadProgressDelegate (上载)。
进度delegate可以是NSProgressIndicators (Mac OS X) 或者 UIProgressViews (iPhone).ASIHTTPRequest会自适应这两个class的行为。你也可以使用自定义class作为进度delegate,只要它响应setProgress:函数。
如果你执行单个request,那么你需要为该request设定upload/download进度delegate
如果你在进行多个请求,并且你想要追踪整个队列中的进度,你必须使用ASINetworkQueue并设置队列的进度delegate
如果上述两者你想同时拥有,恭喜你,0.97版以后的ASIHTTPRequest,这个可以有 ^ ^
IMPORTANT:如果你向一个要求身份验证的网站上传数据,那么每次授权失败,上传进度条就会被重置为上一次的进度值。因此,当与需要授权的web服务器交互时,建议仅当useSessionPersistence为YES时才使用上传进度条,并且确保你在追踪大量数据的上传进度之前,先使用另外的request来进行授权。
追踪小于128KB的数据上传进度目前无法做到,而对于大于128kb的数据,进度delegate不会收到第一个128kb数据块的进度信息。这是因为CFNetwork库API的限制。我们曾向apple提交过bug报告(bug id 6596016),希望apple能修改CFNetwork库以便实现上述功能。
2009-6-21:Apple的哥们儿们真棒!iPhone 3.0 SDK里,buffer大小已经被减小到32KB了,我们的上传进度条可以更精确了。
这个例子中, myProgressIndicator是个 NSProgressIndicator.
在这个例子中, myProgressIndicator 是个 UIProgressView, myQueue是个 ASINetworkQueue.
这个例子中,我们已经为ASINetworkQueues调用过[myQueue go]了。
在这个例子中, myProgressIndicator 是个 UIProgressView。
这个例子中, myProgressIndicator是个 NSProgressIndicator, myQueue是个ASINetworkQueue.
ASIHTTPRequest提供两种进度条显示,简单进度条和精确进度条,使用ASIHTTPRequests 和ASINetworkQueues的showAccurateProgress 来控制。为一个request设置showAccurateProgress只会对该request有效。如果你为一个队列设置showAccurateProgress,那么会影响队列里所有的request。
简单进度条(showAccurateProgress = NO)是ASINetworkQueue的默认值,适用于大量小数据请求。
使用精确进度条追踪上传会轻微降低界面效率,因为进度delegate(一般是UIProgressViews 或NSProgressIndicators)会更频繁地重绘。
使用精确进度条追踪下载会更影响界面效率,因为队列会先为每个GET型request进行HEAD请求,以便统计总下载量。强烈推荐对下载大文件的队列使用精确进度条,但是要避免对大量小数据请求使用精确进度条。
精确进度条(showAccurateProgress = YES)是以同步方式执行的ASIHTTPRequest的默认值。
ASIProgressDelegate 协议定义了所有能更新一个request进度的方法。多数情况下,设置你的uploadProgressDelegate或者 downloadProgressDelegate为NSProgressIndicator或者UIProgressView会很好。但是,如果你想进行更复杂的追踪,你的进度delegate实现下列函数要比 setProgress: (iOS) 或者 setDoubleValue: / setMaxValue: (Mac)好:
这些函数允许你在实际量的数据被上传或下载时更新进度,而非简单方法的0到1之间的数字。
request:incrementDownloadSizeBy: 当下载的大小发生改变时,这个函数会被调用,传入的参数是你需要增加的大小。这通常发生在request收到响应头并且找到下载大小时。
AD:2014WOT全球软件技术峰会北京站 课程视频发布
本文为大家介绍了发ASIHTTPRequest进度追踪的内容,其中包括追踪单个request的下载进度,追踪一系列request的下载进度,追踪单个request的上传进度,追踪一系列request的上传进度,精确进度条vs简单进度条,自定义进度追踪等等内容。
每个ASIHTTPRequest有两个delegate用来追踪进度:
downloadProgressDelegate (下载) 和 uploadProgressDelegate (上载)。
进度delegate可以是NSProgressIndicators (Mac OS X) 或者 UIProgressViews (iPhone).ASIHTTPRequest会自适应这两个class的行为。你也可以使用自定义class作为进度delegate,只要它响应setProgress:函数。
如果你执行单个request,那么你需要为该request设定upload/download进度delegate
如果你在进行多个请求,并且你想要追踪整个队列中的进度,你必须使用ASINetworkQueue并设置队列的进度delegate
如果上述两者你想同时拥有,恭喜你,0.97版以后的ASIHTTPRequest,这个可以有 ^ ^
IMPORTANT:如果你向一个要求身份验证的网站上传数据,那么每次授权失败,上传进度条就会被重置为上一次的进度值。因此,当与需要授权的web服务器交互时,建议仅当useSessionPersistence为YES时才使用上传进度条,并且确保你在追踪大量数据的上传进度之前,先使用另外的request来进行授权。
追踪小于128KB的数据上传进度目前无法做到,而对于大于128kb的数据,进度delegate不会收到第一个128kb数据块的进度信息。这是因为CFNetwork库API的限制。我们曾向apple提交过bug报告(bug id 6596016),希望apple能修改CFNetwork库以便实现上述功能。
2009-6-21:Apple的哥们儿们真棒!iPhone 3.0 SDK里,buffer大小已经被减小到32KB了,我们的上传进度条可以更精确了。
追踪单个request的下载进度
这个例子中, myProgressIndicator是个 NSProgressIndicator.ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDownloadProgressDelegate:myProgressIndicator]; [request startSynchronous]; NSLog(@"Max: %f, Value: %f", [myProgressIndicator maxValue],[myProgressIndicator doubleValue]);
追踪一系列request的下载进度
在这个例子中, myProgressIndicator 是个 UIProgressView, myQueue是个 ASINetworkQueue.- (void)fetchThisURLFiveTimes:(NSURL *)url { [myQueue cancelAllOperations]; [myQueue setDownloadProgressDelegate:myProgressIndicator]; [myQueue setDelegate:self]; [myQueue setRequestDidFinishSelector:@selector(queueComplete:)]; int i; for (i=0; i<5; i++) { ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [myQueue addOperation:request]; } [myQueue go]; } - (void)queueComplete:(ASINetworkQueue *)queue { NSLog(@"Value: %f", [myProgressIndicator progress]); }
这个例子中,我们已经为ASINetworkQueues调用过[myQueue go]了。
追踪单个request的上传进度
在这个例子中, myProgressIndicator 是个 UIProgressView。ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; [request setPostValue:@"Ben" forKey:@"first_name"]; [request setPostValue:@"Copsey" forKey:@"last_name"]; [request setUploadProgressDelegate:myProgressIndicator]; [request startSynchronous]; NSLog(@"Value: %f",[myProgressIndicator progress]);
追踪一系列request的上传进度
这个例子中, myProgressIndicator是个 NSProgressIndicator, myQueue是个ASINetworkQueue.- (void)uploadSomethingFiveTimes:(NSURL *)url { [myQueue cancelAllOperations]; [myQueue setUploadProgressDelegate:myProgressIndicator]; [myQueue setDelegate:self]; [myQueue setRequestDidFinishSelector:@selector(queueComplete:)]; int i; for (i=0; i<5; i++) { ASIHTTPRequest *request = [ASIFormDataRequest requestWithURL:url]; [request setPostBody:[@"Some data" dataUsingEncoding:NSUTF8StringEncoding]]; [myQueue addOperation:request]; } [myQueue go]; } - (void)queueComplete:(ASINetworkQueue *)queue { NSLog(@"Max: %f, Value: %f", [myProgressIndicator maxValue],[myProgressIndicator doubleValue]); }
精确进度条vs简单进度条
ASIHTTPRequest提供两种进度条显示,简单进度条和精确进度条,使用ASIHTTPRequests 和ASINetworkQueues的showAccurateProgress 来控制。为一个request设置showAccurateProgress只会对该request有效。如果你为一个队列设置showAccurateProgress,那么会影响队列里所有的request。简单进度条
当使用简单进度条时,进度条只会在一个request完成时才更新。对于单个request,这意味着你只有两个进度状态:0%和100%。对于一个有5个request的队列来说,有五个状态:0%,25%,50%,75%,100%,每个request完成时,进度条增长一次。简单进度条(showAccurateProgress = NO)是ASINetworkQueue的默认值,适用于大量小数据请求。
精确进度条
当使用精确进度条时,每当字节被上传或下载时,进度条都会更新。它适用于上传/下载大块数据的请求,并且会更好的显示已经发送/接收的数据量。使用精确进度条追踪上传会轻微降低界面效率,因为进度delegate(一般是UIProgressViews 或NSProgressIndicators)会更频繁地重绘。
使用精确进度条追踪下载会更影响界面效率,因为队列会先为每个GET型request进行HEAD请求,以便统计总下载量。强烈推荐对下载大文件的队列使用精确进度条,但是要避免对大量小数据请求使用精确进度条。
精确进度条(showAccurateProgress = YES)是以同步方式执行的ASIHTTPRequest的默认值。
自定义进度追踪
ASIProgressDelegate 协议定义了所有能更新一个request进度的方法。多数情况下,设置你的uploadProgressDelegate或者 downloadProgressDelegate为NSProgressIndicator或者UIProgressView会很好。但是,如果你想进行更复杂的追踪,你的进度delegate实现下列函数要比 setProgress: (iOS) 或者 setDoubleValue: / setMaxValue: (Mac)好:这些函数允许你在实际量的数据被上传或下载时更新进度,而非简单方法的0到1之间的数字。
downloadProgressDelegates方法
request:didReceiveBytes: 每次request下载了更多数据时,这个函数会被调用(注意,这个函数与一般的代理实现的 request:didReceiveData:函数不同)。request:incrementDownloadSizeBy: 当下载的大小发生改变时,这个函数会被调用,传入的参数是你需要增加的大小。这通常发生在request收到响应头并且找到下载大小时。
uploadProgressDelegates方法
request:didSendBytes: 每次request可以发送更多数据时,这个函数会被调用。注意:当一个request需要消除上传进度时(通常是该request发送了一段数据,但是因为授权失败或者其他什么原因导致这段数据需要重发)这个函数会被传入一个小于零的数字。相关文章推荐
- iOS开发ASIHttpRequest介绍(三)-- ASIHTTPRequest进度追踪
- ios开发ASIHTTPRequest-进度追踪
- iOS开发ASIHTTPRequest进度追踪
- iOS开发ASIHTTPRequest进度追踪
- iOS开发ASIHTTPRequest进度追踪【4】
- iOS开发ASIHTTPRequest进度追踪
- iOS开发asi使用(三)ASIHTTPRequest进度追踪
- ios开发ASIHTTPRequest-进度追踪
- IOS网络通信之ASIHttpRequest下载/上传进度的追踪
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- ASIHTTPRequest-进度追踪
- ASIHTTPRequest-进度追踪
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- IOS开发之ASIHTTPRequest-身份验证
- iPhone开发笔记(9)ASIHttpRequest和json-framework实现json解析(iOS客户端)
- iPhone开发笔记(9)ASIHttpRequest和json-framework实现json解析(iOS客户端)
- ios开发之ASIHttpRequest-发送数据
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- ios开发之ASIHTTPRequest-授权流程图
- iOS开发网络篇之:ASIHTTPRequest杂记