iOS開發下載文件速度計算
阿新 • • 發佈:2018-05-16
turn geb intervals light adp 下載界面 interval 一秒 獲取
當我們寫下載界面的時候,需要向用戶展示每秒下載多少KB,這個時候就需要計算速度。如下:
我用的是AFNetworking來做下載的,我們拿AFHTTPRequestOperation來舉列,AFHTTPRequestOperation中有個方法:
[html] view plain copy
- - (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block
這個方法讀取導數據之後通過block回調。計算速度就是在這個block裏面完成的。
需要定義一個下載對象:DownTask。DownTask需要有的屬性:totalRead(一秒讀取的數據)、speed(速度)、date(記錄上一秒計算之後的時間)。註意:這裏的一秒不是嚴格意義上的一秒,有可能大於一秒,我們計算的是平均速度,所以不會誤差太大。
[html] view plain copy
- //計算一秒中的速度
- downTask.totalRead += bytesRead;
- //獲取當前時間
- NSDate *currentDate = [NSDate date];
- //當前時間和上一秒時間做對比,大於等於一秒就去計算
- if ([currentDate timeIntervalSinceDate:downTask.date] >= 1) {
- //時間差
- double time = [currentDate timeIntervalSinceDate:downTask.date];
- //計算速度
- long long speed = downTask.total/time;
- //把速度轉成KB或M
- downTask.speed = [downTask formatByteCount:speed];
- //維護變量,將計算過的清零
- downTask.totalRead = 0.0;
- //維護變量,記錄這次計算的時間
- downTask.date = currentDate;
其中, downTask.speed = [downTask formatByteCount:speed];是用來將字節轉化成我們需要的KB或M。具體實現如下:
[html] view plain copy
- - (NSString*)formatByteCount:(long long)size
- {
- return [NSByteCountFormatter stringFromByteCount:size countStyle:NSByteCountFormatterCountStyleFile];
- }
這個方法是放在下載對象DownTask裏面的。
iOS開發下載文件速度計算