gpt4 book ai didi

iphone - "Refreshing"iPhone/Mac OSX 上的 XML feed

转载 作者:行者123 更新时间:2023-12-03 17:33:15 28 4
gpt4 key购买 nike

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

最直接的方法是用从提要中获取的任何内容来填充某个集合,例如 NSMutableArray。如果 UI 上的小部件可以刷新,我通常会执行以下操作:

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

这似乎是刷新 XML 提要效率最低的算法。例如,许多正在构建 Twitter 客户端的人都会对现有的 feed 进行更改,而不是再次以完整的形式删除整个 feed。

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

谢谢大家。

最佳答案

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

(免责声明:我在 Apple 时编写了很多该框架:)

您问题的答案是 Feed 本质上效率低下。您可以通过以下方式最大限度地减少这种情况

  1. 使用 HTTP“条件 GET”,因此如果服务器上的 feed 没有更改,您只会收到一个微小的 304 响应。这可以节省服务器和您的时间。 (如果您不使用条件获取,某些提要服务器(例如slashdot)将禁止您!)

  2. 检查响应中的“上次修改时间:”日期。是的,即使您使用条件 GET。有些服务器不能正确处理它们。如果日期未更改,请忽略该 Feed。

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

  4. 现在您必须解析 XML。

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

  6. 如果您到达这里,提要很可能已更新。最简单的方法就是扔掉所有旧保存的条目并用新条目替换它们。但这意味着您无法保留从提要末尾掉落的“历史”条目。如果您想这样做,则必须遍历刚刚解析的提要中的每个条目,将其与持久存储中的相应条目进行匹配,并根据新条目更新持久条目。如果您找不到持久条目,请将其添加为新条目。 (在不包含每个条目的唯一 GUID 的蹩脚 RSS 提要中,匹配条目可能很困难。您必须尝试比较永久链接和标题。糟糕。)

这整件事真是一团糟。我们需要做大量的工作才能使一切正常运行并与所有损坏的提要和服务器一起工作;如果可以的话,利用我的痛苦并使用 PubSub :)

关于iphone - "Refreshing"iPhone/Mac OSX 上的 XML feed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/802571/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com