我的问题源于这样一个事实,即我的数组中有100个URL,我循环遍历数组,将每个项目射入API,并以JSON的形式返回一些结果.这是异步激活100个NSURLConnection调用.
我不确定这是不是一个问题,但是当我给它100个URL(真正的字符串,没有一个是nil)时,返回的数据通常具有JSON键的空值(当它们不应该时),或者回来的数据是零.还有一堆重复.
我应该比现在更好地处理多个异步连接吗?如果是这样,怎么样?
解决方法
>如果您正在执行并发异步请求并使用异步NSURLConnection,那么您将需要为此下载操作定义自己的类,以确保每个连接都跟踪其自己的属性.这样,一切都可以封装在这个类中,生成的下载对象可以跟踪下载的内容,解析的内容等.如果你没有使用异步NSURLConnection(例如你只是使用dataWithContentsOfURL),那就更容易了,虽然您丢失了NSURLConnection提供的一些进度更新和/或流媒体机会.
>为获得最佳性能,您应该执行并发请求.话虽如此,您不应该有超过四或五个并发请求进入任何特定服务器.这是iOS施加的约束,特别是如果您的网络连接速度较慢,则可能会出现连接超时的风险.
>如果您在模拟器上进行初步测试,您可能需要确保尝试“网络链接调节器”.它是“Xcode的硬件IO工具”的一部分,可在Downloads for Apple Developers处获得.存在一些问题(例如,如果您有太多并发请求发送到特定服务器,则会出现上述超时问题),这些问题仅在慢速连接中显示.
>话虽如此,您还需要确保在具有真实网络速度的设备上测试您的解决方案.在模拟器上成功运行大规模并行任务很容易,这些任务对于设备来说过于贪婪.将并发会话数限制为五会减少此资源问题,但它应该是您的测试策略的一部分.
>我同意JRG-Developer,您应该查看已建立的框架,例如AFNetworking.确保为AFHTTPClient的队列设置maxConcurrentOperationCount,但是,如果排队100加上操作.
>我不知道您的100个请求需要多少数据,但需要预先知道应用程序审批流程已被拒绝拒绝在蜂窝网络上发出特殊网络请求的应用程序.应用程序审核指南中未明确说明过度细胞网络活动的内容,但Avoiding iPhone App Rejection From Apple声称您应确保在5分钟内不超过4.5mb.您可以使用Reachability来确定您所在的网络类型,并且如果用户处于蜂窝状态(如果数据量接近此阈值),则可能会警告用户.