为什么iOS的大多数网络框架都有一个队列来管理请求?排队请求带来了哪些好处?
例如, AFNetworking 有一个NSOperationQueue
来管理其请求。为什么需要那个队列?
答案 0 :(得分:3)
网络请求最好是异步完成的。这有几个原因,例如不可预测的响应时间和可能的网络故障。因此,当您设计一个依赖于网络请求的应用程序时,最好在设计时考虑到这一点。例如,如果您需要填写一个表,而不是直接在一个调用中执行它,那么当数据在回调例程中返回时(或当您的应用发现请求已完成时),您将填充它。
异步意味着多个任务。在您的应用程序设计中实现这一点很难。 NSOperationQueues是一种非常好的方法来保护应用程序免受这些复杂性的影响。特别是,它提供了一种非常自然的方法来确保只有在数据就绪时才调用任务 - 这是因为NSOperationQueue将序列化队列上的任务,而无需管理自己的信号量或其他同步原语。
答案 1 :(得分:0)
不仅对异步呼叫很重要,而且你也不想保持状态,是吗?也许你想要一系列的调用 - 而不是等待响应然后手动触发下一个操作,你可以填充队列并让管理员根据响应从那里调度它。
其他用法可能是上传多个文件 - 您不想一次上传超过一定数量的文件吗?如果你失去了互联网连接而你发现自己已经完成了所有这些,那该怎么办?这肯定会让你的用户感到不安。而是再次填充操作队列,一旦上传了一个文件,就会自动调度下一个文件。
最后 - 如果你使用队列,如果发生故障,你可以拥有一个队列观察器,它可以重新调度失败的查询或删除后面的后续调用。
总体而言,它使您的网络组件更加强大,当然也可以维护。