可以将字节转化为我们需要的Kb或者m

+ (NSString *)stringFromByteCount:(long long)byteCount countStyle:(NSByteCountFormatterCountStyle)countStyle;

可以实现下载功能

我用的是AFNetworking来做下载的,我们拿AFHTTPRequestOperation来举列,AFHTTPRequestOperation中有个方法:

- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block

这个方法读取导数据之后通过block回调。计算速度就是在这个block里面完成的。

需要定义一个下载对象:DownTask。DownTask需要有的属性:totalRead(一秒读取的数据)、speed(速度)、date(记录上一秒计算之后的时间)。注意:这里的一秒不是严格意义上的一秒,有可能大于一秒,我们计算的是平均速度,所以不会误差太大。

下载中代码:

//模拟af下载进度
- (void)downloadProgressbytesRead:(NSUInteger)bytesRead totalBytesRead:(long)totalBytesRead totalBytesExpectedToRead:(long)totalBytesExpectedToRead {
//这里应该是在请求的时候初始化,下载中进行变量的改变,注意要写在外面哦
DownTask *down = [[DownTask alloc]init];
//计算一秒中的数据
down.totalRead += bytesRead;
//获取当前时间
NSDate *currentDate = [NSDate date];
//当前时间和上一秒时间做对比,大于等于一秒就去计算
if ([currentDate timeIntervalSinceDate:down.date] >= ) {
//时间差
double time = [currentDate timeIntervalSinceDate:down.date];
//计算速度
long long speed = down.totalRead/time;
//把速度转成KB或M
down.speed = [down formatByteCount:speed];
//维护变量,将计算过的清零
down.totalRead = 0.0;
//维护变量,记录这次计算的时间
down.date = currentDate;
}
}

DownTask代码:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface DownTask : NSObject @property (nonatomic,assign)NSUInteger totalRead;//一秒读取的数据
@property (nonatomic,copy)NSString *speed;//速度
@property (nonatomic,strong)NSDate *date;//记录上一秒计算之后的时间 - (NSString*)formatByteCount:(long long)size; @end
#import "DownTask.h"

@implementation DownTask

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

最新文章

  1. tensorflow3
  2. CF 628B New Skateboard --- 水题
  3. hive 中 union all
  4. nginx优化之request_time 和upstream_response_time差别
  5. BC-Clarke and five-pointed star(水)
  6. vc++ 获取当前用户名
  7. 关于网上流传的四个原版Windows XP_SP2全面了解
  8. MFC非模态对话框中屏蔽ESC键
  9. C#中DataTable与实体集合通用转换(使用扩展方法)
  10. jeewx的使用_01 接入和验证
  11. iOS-C文件添加到iOS项目中,运行报错
  12. scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(&lt;:)和类型下界(&gt;:)的使用
  13. A Magic Lamp(贪心+链表)
  14. Android 热补丁实践之路
  15. ORACLE复制表结构
  16. PAT 甲级 1079 Total Sales of Supply Chain
  17. js时间格式化函数(兼容IOS)
  18. linux时间
  19. Go基础----&gt;go的基础学习(四)
  20. dos常用命令【总结】

热门文章

  1. ZOJ 2112 Dynamic Rankings(二分,树套树)
  2. Nginx+proxy实现简单的负载均衡
  3. centos 通用开发工具及库安装 有了它不用愁了
  4. Java 虚拟机枚举 GC Roots 解析
  5. 2018.2.3 Centos 的vim好看的主题配置及JDK的安装配置
  6. 树莓派(raspberry pi)更改键盘布局
  7. vue 自定义动态弹框
  8. ZR#317.【18 提高 2】A(计算几何 二分)
  9. 谈谈Integer中的静态类IntegerCache
  10. gitlab文件夹的权限不要随便给777