我很好奇那些正在构建基于REST / SOAP / XML-RPC的iPhone应用程序或只是简单地下拉动态XML Feed的人,当用户说“刷新”Feed时,这对你来说意味着什么? ?

直接的方法是填充一些集合,例如NSMutableArray,以及从Feed中删除的任何内容。如果UI上的小部件可用于刷新,我通常会执行以下操作:

[myMutableArray removeAllObjects];
// follow steps to repopulate myMutableArray

这似乎是刷新XML Feed的效率最低的算法。例如,许多正在构建Twitter客户端的人正在将更改添加到他们现有的Feed中,而不是再次以完整的形式关闭整个Feed。

您使用什么样的算法来“刷新”?与服务器端数据源通话时的模型?

谢谢大家。

有帮助吗?

解决方案

如果您需要OS X 10.5,则应该考虑使用PubSub框架。它明确地设计用于获取和更新RSS / Atom提要。

(免责声明:我在Apple时写了很多这样的框架:)

您的问题的答案是Feed本身效率低下。你可以通过

最小化这个
  1. 使用HTTP“条件GET”,因此如果服务器上的Feed没有更改,您只需返回一个小的304响应。这为服务器和您节省了时间。 (如果你不使用条件获取,某些提要服务器,比如slashdot会禁止你!)

  2. 选中“Last-Modified:”回复日期。是的,即使您使用有条件的GET。某些服务器无法正确处理它们。如果日期未更改,请忽略该Feed。

  3. 将响应的原始数据与您获得的最后一个原始响应进行比较。如果相同,请忽略该Feed。 (某些服务器不支持条件获取或发送最后修改日期...)

  4. 现在你必须解析XML。

  5. 检查Feed本身的顶级修改日期(这在Atom和不同版本的RSS之间有所不同。)同样,如果它与上次相同,请忽略该Feed。

  6. 如果你到了这里,最有可能更新了Feed。最简单的方法是扔掉所有旧的保存条目,并用新的条目替换它们。但这意味着你不能保留已经从饲料结束时掉落的“历史性”条目。如果要这样做,则必须遍历刚刚解析的Feed中的每个条目,将其与持久存储中的相应条目匹配,并根据新条目更新持久条目。如果找不到持久的,请将其添加为新条目。 (对于每个条目不包含唯一GUID的蹩脚RSS源,匹配条目可能很难。您必须尝试比较固定链接和标题。哎呀。)

  7. 这整件事真是一团糟。要使一切行为正常并与所有破碎的源和服务器一起工作,需要做大量的工作;利用我的痛苦并使用PubSub,如果可以:)

其他提示

一种方法是在后台线程中使用内置的NSXML pull解析器,并将流中的条目与内存中的条目进行比较,仅更新已更改的内容。

我刚刚发布了一个开放源代码适用于iPhone的RSS / Atom Parser ,希望它可能属于某些人使用

我也很乐意听到你的想法!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top