gpt4 book ai didi

iphone - 使用 cocoa touch 在 iPhone 上测量下载速度的最佳方法

转载 作者:可可西里 更新时间:2023-11-01 04:54:10 25 4
gpt4 key购买 nike

我正在制作一个应用程序,其中我想提供的功能之一是测量连接的下载速度。为此,我使用 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;
}
}

我想知道是否有更好的方法来做到这一点。使用更好的算法或更好的类。

谢谢。

最佳答案

一旦开始下载,立即捕获当前系统时间并将其存储为 startTime。然后,您需要做的就是计算下载过程中任意时刻的数据传输速度。只需再次查看系统时间并将其用作 currentTime 来计算到目前为止花费的总时间。

downloadSpeed = bytesTransferred / (currentTime - startTime)

像这样:

static NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate];    
NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate];
double downloadSpeed = totalBytesWritten / (currentTime - startTime);

您可以使用 NSURLConnectionDownloadDelegate 中的此方法:

- (void)connectionDidResumeDownloading:(NSURLConnection *)connection totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long) expectedTotalBytes;

关于iphone - 使用 cocoa touch 在 iPhone 上测量下载速度的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12271502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com