限制NSURLConnection数据速率? (带宽限制)

时间:2012-11-09 18:51:45

标签: ios macos cocoa nsurlconnection bandwidth-throttling

有没有办法限制NSURLConnection使用的带宽,或者我被迫使用CFNetwork方法?

1 个答案:

答案 0 :(得分:1)

是的,但它并不漂亮(根据this mailing list post运作):

  • 在后台线程上启动NSURLConnection(您必须设置一个运行循环)。
  • 睡在-connection:didReceiveData:
  • 以线程安全的方式将数据转发到主线程。

如果委托人是UIViewController,那么第三个要点有点棘手,但如果delegate__weak__unsafe_unretained,则此类内容应该有效:< / p>

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
  [NSThread sleepForTimeInterval:...];
  [self performSelectorOnMainThread:@selector(notifyDelegateDidReceiveData:) withObject:data waitUntilDone:NO];
}

-(void)notifyDelegateDidReceiveData:(NSData*)data
{
  assert([NSThread isMainThread]);
  [delegate myConnectionWrapper:self didReceiveData:data];
}

计算睡眠时间是非常重要的,因为您可能希望考虑TCP / IP开销,但[data length]+100可能是正确的。

如果您有多个连接,并且想要限制组合带宽,请将它们全部放在相同的后台线程/运行循环中(请参阅-performSelector:onThread:withObject:waitUntilDone:)。

对于CFNetwork版本,我猜你已经阅读了this post on Cocoa with Love