iOS開發下載文件速度計算

當咱們寫下載界面的時候,須要向用戶展現每秒下載多少KB,這個時候就須要計算速度。以下:html

 

 

我用的是AFNetworking來作下載的,咱們拿AFHTTPRequestOperation來舉列,AFHTTPRequestOperation中有個方法:ios

 

 

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

 

這個方法讀取導數據以後經過block回調。計算速度就是在這個block裏面完成的。spa

 

須要定義一個下載對象:DownTask。DownTask須要有的屬性:totalRead(一秒讀取的數據)、speed(速度)、date(記錄上一秒計算以後的時間)。注意:這裏的一秒不是嚴格意義上的一秒,有可能大於一秒,咱們計算的是平均速度,因此不會偏差太大。.net

 

[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。具體實現以下:orm

 

 

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


 

這個方法是放在下載對象DownTask裏面的。xml

相關文章
相關標籤/搜索