有没有办法限制 NSURLConnection 使用的带宽,或者我被迫使用 CFNetwork 方法?
是的,但它并不漂亮(它的工作原理是这个邮件列表帖子):
- 在后台线程上启动 NSURLConnection (您必须设置一个运行循环)。
- 睡个懒觉
-connection:didReceiveData:
.
- 以线程安全的方式将数据转发到主线程。
如果代表是一个人,那么第三个要点就有点棘手了。UIViewController
,但是这样的事情应该可以工作delegate
is __weak
or __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
可能是对的。
如果您有多个连接并且想要限制组合带宽,请将它们全部放在same后台线程/运行循环(参见-performSelector:onThread:withObject:waitUntilDone:
).
对于 CFNetwork 版本,我猜您已经阅读过这篇关于可可与爱的文章.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)