当我们写下载界面的时候,需要向用户展示每秒下载多少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。用到的是:NSByteCountFormatter,具体实现如下:

- (NSString*)formatByteCount:(long long)size
{
return [NSByteCountFormatter stringFromByteCount:size countStyle:NSByteCountFormatterCountStyleFile];
}

这个方法是放在下载对象DownTask里面的。

iOS开发下载文件速度计算相关推荐

  1. h5 ios Safair下载文件自动添加.html导致文件乱码问题,ios不能使用接口播放视频的问题

    需求:h5 页面 下载pdf,doc,docx,xlsx,xls 文件的功能 在安卓手机和 ios上的uc浏览器是可以正常的 下载或者预览的 但是在ios的Safair 下载时会被自动添加html尾缀 ...

  2. 外国官方网站下载文件速度缓慢

    我们经常要下载东西,特别是一下专业软件就不得不到官方网站下载了,但很多这样的软件常常需要到外国的一些官方网站里下载了.可是,也经常遇到下载速度过于缓慢的的问题,在这我是用了一个简单但是略显笨的方法,但 ...

  3. macOS/iOS WKWebview 下载文件

    WKWebview 下载文件需要通过JS注入的方式来下载.js下载的数据是base64编码的,回到给原生后,原生需要反编码后才是原始文件的数据. 具体步骤: 配置WKWebview的js回调句柄(标识 ...

  4. minio下载文件速度很慢的原因分析与说明

    文章目录 1.实战背景 2.问题描述 3.问题分析 4.问题解决 1.实战背景 最近在做一个项目,需要用到minio来搭建文件系统,先简单说一下我在项目中设置的上传文件流程: 前端将分块文件逐一传给后 ...

  5. ios开发描述文件添加新设备

    我们经常用到真机测试,再development证书中添加新的设备. 首先在devices中 添加上自己的设备,然后需要获取uuid号.起个名字,填上你设备的uuid号 然后到描述文件里,重新生成一下描 ...

  6. php ios 不能下载文件,iOS大厅不能下载公告

    各位飞智iOS用户们: 最新进展时间:20170119 16:45 本次维护结束 1.影之刃2.疯狂贪吃蛇.弓箭手大作战.崩坏学园2.镇魔曲.怪兽大作战.啪啪游戏厅仅支持64位机型(iphoneSE/ ...

  7. iOS开发-plist文件增删改查

    plist第一次看到这个后缀名文件的时候感觉怪怪的,不过接触久了也就习以为常了,plist是Property List的简称可以理解成属性列表文件,主要用来存储串行化后的对象的文件.扩展名为.plis ...

  8. iOS开发中文件管理者NSFileManager的使用,收藏使用!

    NSFileManger文件管理者的使用 //创建文件管理者NSFileManager *fileManger = [NSFileManager defaultManager];//判断指定文件或文件 ...

  9. iOS开发 下载历史版本Xcode 下载历史版本OSX系统等

    https://developer.apple.com/download/more/ 图1

  10. iOS开发常用三方库、插件、知名博客

    TimLiu-iOS iOS开发常用三方库.插件.知名博客等等,期待大家和我们一起共同维护,同时也期望大家随时能提出宝贵的意见(直接提交Issues即可). 持续更新... 版本:Objective- ...

最新文章

  1. Ubuntu14搭建配置青岛大学OJ系统
  2. Django_博客_XSS 攻击防范
  3. MySQL数据导入oracle
  4. boost::mpl模块实现is_placeholder相关的测试程序
  5. hibernate 映射四多对一双向映射
  6. java多线程编程_《java多线程编程实战指南》读书笔记 -- 基本概念
  7. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节3:I/O控制方式
  8. thinkphp中mysql添加数据_thinkphp添加数据 add()方法
  9. 构建嵌入式版本的 ACE TAO 6.5.3
  10. android 编程 输入矩阵,Android中Matrix的pre post set方法理解
  11. 基于jdk proxy的动态代理模式
  12. Linux ifconfig命令示例
  13. eclipse svn 忽略 target/.project /.classpath /.settings等 目录
  14. 第10题 正则表达式匹配(动态规划)
  15. 兼容android模拟器的微信apk,Android模拟器中安装apk的方法
  16. Android页面的跳转
  17. Java后台获取USB二维码扫描枪内容(Java监听系统键盘操作)
  18. JAVA_抽象类和接口
  19. 计算机联锁想系统包括哪几层,计算机联锁系统技术_习题.ppt
  20. C# winform 学习(一)

热门文章

  1. 设计模式-结构型软件设计模式(二)
  2. 微信公众号开发之微信支付开发
  3. win10如何打来计算机的工具,电脑系统教程:Win10自带解压缩文件工具如何使用
  4. java jxls_java使用jxls导出Excel
  5. 七上八下猜数字_猜数字教案
  6. 【Excel】按百分比随机抽取excel中数据
  7. 人脸检测——FDDB数据集评估
  8. docker介绍与应用
  9. Java写入文件换行
  10. 消息队列原理和应用场景总结