zoukankan      html  css  js  c++  java
  • NSByteCountFormatter

    可以将字节转化为我们需要的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] >= 1) {
            //时间差
            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
  • 相关阅读:
    Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
    Linkerd 2.10(Step by Step)—多集群通信
    Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
    Linkerd 2.10(Step by Step)—控制平面调试端点
    Linkerd 2.10(Step by Step)—配置超时
    Linkerd 2.10(Step by Step)—配置重试
    Linkerd 2.10(Step by Step)—配置代理并发
    本地正常运行,线上环境诡异异常原因集合
    Need to invoke method 'xxx' declared on target class 'yyy', but not found in any interface(s) of the exposed proxy type
    alpine 安装常用命令
  • 原文地址:https://www.cnblogs.com/hxwj/p/5388124.html
Copyright © 2011-2022 走看看