1. 程式人生 > >iOS開發下載文件速度計算

iOS開發下載文件速度計算

turn geb intervals light adp 下載界面 interval 一秒 獲取

當我們寫下載界面的時候,需要向用戶展示每秒下載多少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. NSDate *currentDate = [NSDate date];
  5. //當前時間和上一秒時間做對比,大於等於一秒就去計算
  6. if ([currentDate timeIntervalSinceDate:downTask.date] >= 1) {
  7. //時間差
  8. double time = [currentDate timeIntervalSinceDate:downTask.date];
  9. //計算速度
  10. long long speed = downTask.total/time;
  11. //把速度轉成KB或M
  12. downTask.speed = [downTask formatByteCount:speed];
  13. //維護變量,將計算過的清零
  14. downTask.totalRead = 0.0;
  15. //維護變量,記錄這次計算的時間
  16. 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裏面的。

iOS開發下載文件速度計算