NSByteCountFormatter
2024-08-24 00:34:27
可以将字节转化为我们需要的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
最新文章
- tensorflow3
- CF 628B New Skateboard --- 水题
- hive 中 union all
- nginx优化之request_time 和upstream_response_time差别
- BC-Clarke and five-pointed star(水)
- vc++ 获取当前用户名
- 关于网上流传的四个原版Windows XP_SP2全面了解
- MFC非模态对话框中屏蔽ESC键
- C#中DataTable与实体集合通用转换(使用扩展方法)
- jeewx的使用_01 接入和验证
- iOS-C文件添加到iOS项目中,运行报错
- scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<;:)和类型下界(>;:)的使用
- A Magic Lamp(贪心+链表)
- Android 热补丁实践之路
- ORACLE复制表结构
- PAT 甲级 1079 Total Sales of Supply Chain
- js时间格式化函数(兼容IOS)
- linux时间
- Go基础---->;go的基础学习(四)
- dos常用命令【总结】
热门文章
- ZOJ	2112 Dynamic Rankings(二分,树套树)
- Nginx+proxy实现简单的负载均衡
- centos 通用开发工具及库安装 有了它不用愁了
- Java 虚拟机枚举 GC Roots 解析
- 2018.2.3 Centos 的vim好看的主题配置及JDK的安装配置
- 树莓派(raspberry pi)更改键盘布局
- vue 自定义动态弹框
- ZR#317.【18 提高 2】A(计算几何 二分)
- 谈谈Integer中的静态类IntegerCache
- gitlab文件夹的权限不要随便给777