zoukankan      html  css  js  c++  java
  • iOS开发下载文件速度计算

    当我们写下载界面的时候,需要向用户展示每秒下载多少KB,这个时候就需要计算速度。如下:

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

    [html] view plain copy
     
    1. - (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block  

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

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

    [html] view plain copy
     
    1. //计算一秒中的速度  
    2. downTask.totalRead += bytesRead;  
    3.   
    4. //获取当前时间  
    5. NSDate *currentDate = [NSDate date];  
    6.   
    7. //当前时间和上一秒时间做对比,大于等于一秒就去计算  
    8. if ([currentDate timeIntervalSinceDate:downTask.date] >= 1) {  
    9. //时间差  
    10. double time = [currentDate timeIntervalSinceDate:downTask.date];  
    11.   
    12. //计算速度  
    13. long long speed = downTask.total/time;  
    14.   
    15. //把速度转成KB或M  
    16. downTask.speed = [downTask formatByteCount:speed];  
    17.   
    18. //维护变量,将计算过的清零  
    19. downTask.totalRead = 0.0;  
    20.   
    21. //维护变量,记录这次计算的时间  
    22.   
    23. downTask.date = currentDate;  

    其中, downTask.speed = [downTask formatByteCount:speed];是用来将字节转化成我们需要的KB或M。具体实现如下:

    [html] view plain copy
     
    1. - (NSString*)formatByteCount:(long long)size  
    2. {  
    3. return [NSByteCountFormatter stringFromByteCount:size countStyle:NSByteCountFormatterCountStyleFile];  
    4. }  


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

  • 相关阅读:
    .net知识和学习方法系列(二十)CLR委托
    Asp.net用户管理API的应用(上)
    .net知识和学习方法系列(十七)CLRCLR中的值类型和引用类型
    .net知识和学习方法系列(十九)CLR事件
    Internet Explorer 8 Beta2 常见问题解答
    关于设计模式
    Extjs中ComboBox加载并赋初值
    WPF获取窗体元素
    Extjs使用extend(js继承)
    Extjs解决上传图片预览
  • 原文地址:https://www.cnblogs.com/sunfuyou/p/9045401.html
Copyright © 2011-2022 走看看