我必须编写代码从网站下载,然后每 3 秒计算一次下载的吞吐量(以字节/秒为单位)。我怎样才能做到这一点?假设我下载了网站,但是我需要将它存储在某种可变数组中,该数组存储字节,然后每 3 秒后将其长度除以 3。我可以使用什么计时器来帮助我了解吞吐量?
此外,数据需要以字节存储,所以我可以使用哪种数组类型?
我必须编写代码从网站下载,然后每 3 秒计算一次下载的吞吐量(以字节/秒为单位)。我怎样才能做到这一点?假设我下载了网站,但是我需要将它存储在某种可变数组中,该数组存储字节,然后每 3 秒后将其长度除以 3。我可以使用什么计时器来帮助我了解吞吐量?
此外,数据需要以字节存储,所以我可以使用哪种数组类型?
阅读URL 加载系统编程指南以了解NSURLConnection
. 如果您只想计算“吞吐量”的简单定义,您甚至不需要存储接收到的实际字节,尽管NSURLConnection
会这样做。您只需要计算接收到的字节数。
要测量接收文件所需的时间,请[NSDate timeIntervalSinceReferenceDate]
在开始之前(或之后)调用NSURLConnection
. 然后在连接完成时再次调用它。减去。不同之处在于下载持续时间(以秒为单位)。
阅读定时器编程主题以了解NSTimer
. 使用 1 通知您已经过去了三秒钟。
阅读NSURLConnection。如果您实现它的委托,您将在收到数据时被回调。NSURLConnection 提供了一种一次性发出请求的方法,但这种方式可以向用户呈现部分结果。
创建三个属性来保持状态:
@property(nonatomic, strong) NSDate *start;
@property(nonatomic, assign) NSInteger bytesSoFar;
@property(nonatomic, assign) float throughputSoFar;
- (void)start {
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
self.start = [NSDate date];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSDate *now = [NSDate date];
self.bytesSoFar += [data length];
self.throughputSoFar = self.bytesSoFar / [now timeIntervalSinceDate:self.start];
// update the UI with progress
}
当你得到 connectionDidFinishLoading 时,self.throughputSoFar 将是最终的吞吐量。