iOS开发下载文件速度计算
当我们写下载界面的时候,需要向用户展示每秒下载多少KB,这个时候就需要计算速度。如下:
我用的是AFNetworking来做下载的,我们拿AFHTTPRequestOperation来举列,AFHTTPRequestOperation中有个方法:
- - (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block
这个方法读取导数据之后通过block回调。计算速度就是在这个block里面完成的。
需要定义一个下载对象:DownTask。DownTask需要有的属性:totalRead(一秒读取的数据)、speed(速度)、date(记录上一秒计算之后的时间)。注意:这里的一秒不是严格意义上的一秒,有可能大于一秒,我们计算的是平均速度,所以不会误差太大。
- //计算一秒中的速度
- downTask.totalRead += bytesRead;
- //获取当前时间
- NSDate *currentDate = [NSDate date];
- //当前时间和上一秒时间做对比,大于等于一秒就去计算
- if ([currentDate timeIntervalSinceDate:downTask.date] >= 1) {
- //时间差
- double time = [currentDate timeIntervalSinceDate:downTask.date];
- //计算速度
- long long speed = downTask.total/time;
- //把速度转成KB或M
- downTask.speed = [downTask formatByteCount:speed];
- //维护变量,将计算过的清零
- downTask.totalRead = 0.0;
- //维护变量,记录这次计算的时间
- downTask.date = currentDate;
其中, downTask.speed = [downTask formatByteCount:speed];是用来将字节转化成我们需要的KB或M。具体实现如下:
- - (NSString*)formatByteCount:(long long)size
- {
- return [NSByteCountFormatter stringFromByteCount:size countStyle:NSByteCountFormatterCountStyleFile];
- }
这个方法是放在下载对象DownTask里面的。
iOS开发下载文件速度计算的更多相关文章
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
- 李洪强漫谈iOS开发[C语言-041]-计算月份天数
李洪强漫谈iOS开发[C语言-041]-计算月份天数
- iOS开发之文件(分段)下载
1.HTTP HEAD方法 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 t ...
- web开发下载文件夹
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用.此控件PC全平台支持包括mac,linux系统的文件上传,文章末尾将附上控件下载与教程链接 ...
- iOS开发——下载器的功能基本实现
今天,做了一个下载器的Demo,即从本地配置的Apache服务器上,下载指定的文件.这次,我们下载服务器根目录下的html.mp4文件. 按照惯例,我们先创建一个URL对象和请求. NSURL *ur ...
- iOS 开发 Pch 文件的正确使用
在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch头文件的内容能被项目中的其他所有源文件 ...
- iOS开发系列-文件上传
概述 Http协议对文件上传协议要求的 1. 必须设置请求头Content-Type为multipart/form-data.在iOS中后面需要跟上分隔符比如:boundary=----WebKitF ...
- iOS开发--音乐文件播放工具类的封装(包含了音效的封装)
一.头文件 #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> @interface ...
- IOS开发-PCH文件的使用
PCH文件存储一些共享的数据,在其他的文件可以直接使用,这样减少程序输入,比如存储宏定义 1.首先新建PCH文件 2.建立完毕 3.在这里找到文件路径 4.进入targets 点击Build Sttt ...
随机推荐
- VMware5.5-vCenter的安装准备及安装
vSphere 最近公司来了新同事,为了帮助他尽快熟悉VM-vsphere,一块复习了下,并把实验总结为文档. 声明:本例是以王隆杰老师的vsphere5.5教程为基础和线索进行的,由于时间匆忙,可能 ...
- bootstrap-year-calendar全年日历插件
使用方法使用bootstrap-year-calendar插件需要引入jQuery.Bootstap3的相关依赖文件和插件本身需要的js和css文件. <link rel="style ...
- phpExcel导入大数据量情况下内存溢出解决方案
PHPExcel版本:1.7.6+ 在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过 PHPExcel_Settings::setCacheStorageMeth ...
- Java第二课 项目的导入和导出
Java项目的导入和导出 项目的导入和导出1)导入 右击myeclipse或eclipse的左侧有项目那一栏空白部分或者是File--Import,然后选择Import--General--双击Exi ...
- JS_高程3.基本概念(4)操作符
ECMA-262用于操作数据值的操作符包括: 算术操作符 位操作符 关系操作符 相等操作符 ECMAScript操作符的不同之处在于:它能够适用于很多值,包括字符串,数字值,布尔值,甚至是对象.(在应 ...
- HTML自学笔记
HTML自学笔记 1.HTML Hyper Text Markup Language 超文本标记语言 超文本:比普通文本更加强大,可以添加各种样式 标记语言:通过一组标签来对内容进行描述. 标签:&l ...
- js扩展运算符(spread)三个点(...)
常见用法: 1.该运算符主要用于函数调用. function push(array, ...items) { array.push(...items); } function add(x, y) { ...
- 设备树(device tree)学习笔记
作者信息 作者:彭东林 邮箱:pengdonglin137@163.com 1.反编译设备树 在设备树学习的时候,如果可以看到最终生成的设备树的内容,对于我们学习设备树以及分析问题有很大帮助.这里我们 ...
- 两个UITableView的级联菜单
效果 源码 https://github.com/YouXianMing/Animations 说明 1. TwoLevelLinkageView封装了两个tableView,左边tableView中 ...
- springboot RestTemplate httpclient
RestTemplate是spring支持的一个请求http rest服务的模板对象,性质上有点像jdbcTemplate RestTemplate底层还是使用的httpclient(org.apac ...