我正在制作一个应用程序,其中我想要提供的功能之一是测量连接的下载速度。为此,我使用 NSURLConnection 开始下载一个大文件,并在一段时间后取消下载并进行计算(下载的数据/经过的时间)。虽然其他应用程序如 speedtest.net 每次都提供恒定的速度,但我的或多或少波动 2-3 Mbps。
基本上我正在做的是,在调用方法 connection:didReceiveResponse: 时启动计时器。方法connection:didReceiveData: 500调用后我取消下载,停止定时器,计算速度。
这是代码:
- (IBAction)startSpeedTest:(id)sender
{
limit = 0;
NSURLRequest *testRequest = [NSURLRequest requestWithURL:self.selectedServer cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
NSURLConnection *testConnection = [NSURLConnection connectionWithRequest:testRequest delegate:self];
if(testConnection) {
self.downloadData = [[NSMutableData alloc] init];
} else {
NSLog(@"Failled to connect");
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.startTime = [NSDate date];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.downloadData appendData:data];
if (limit++ == 500) {
[self.connection cancel];
NSDate *stop = [NSDate date];
[self calculateSpeedWithTime:[stop timeIntervalSinceDate:self.startTime]];
self.connection = nil;
self.downloadData = nil;
}
}
我想知道是否有更好的方法来做到这一点。更好的算法,或者更好的类来使用。
谢谢。