有没有办法来限制一个NSURLConnection的使用的带宽,或者我被迫使用CFNetwork的方法呢?
Answer 1:
是的,但它不是漂亮(它的工作原理,根据这个邮件列表后 ):
- 在后台线程启动NSURLConnection的(你必须建立一个运行循环)。
- 睡在
-connection:didReceiveData:
- 转发你的数据在一个线程安全的方式为主线。
第三bulletpoint是有点棘手得到的权利,如果该委托是一个UIViewController
,但这样的事情应该工作提供delegate
是__weak
或__unsafe_unretained
:
- (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的版本,我猜你已经读过这篇文章的可可与爱情 。
文章来源: Limit NSURLConnection data rate? (Bandwidth throttling)