【问题标题】:What's the best way to access a value immediately, when it's come from the server?当它来自服务器时,立即访问值的最佳方式是什么?
【发布时间】:2015-02-20 19:30:41
【问题描述】:

我有服务器端表 'user' 和 'user_currency'。

在我的前端 iOS 应用程序中,我希望能够在应用程序的各个区域检索用户当前的货币(应用内货币)金额。例如,它将显示在应用程序中的几乎每个视图上,向他们展示他们当前拥有多少。在执行需要货币的操作时也会使用它。

这应该如何最好地设置?

A) 假设我们只有一个名为 fetchUserCurrencyWithCompletion 的方法。此方法将从服务器异步获取数据,然后调用者需要在完成块中提供一些代码来说明如何处理它。这有一个问题。如果应用程序中的每个视图都显示用户的货币金额,那么必须等到异步完成,每次都会导致一些“屏幕/视图闪烁”,因为视图会先加载,然后再过一段时间显示货币。

B) 在 fetchUserCurrencyWithCompletion 中实现缓存。代替 (void),将其设为 (NSNumber *)fetchUserCurrencyWithCompletion。立即返回的 NSNumber 值将包含缓存的货币值。然后再一次,在运行异步获取之后,调用者完成代码将运行,他们可以相应地更新他们的货币使用。当 fetchedResult 与缓存不同时,这只会导致正在显示的货币金额的屏幕闪烁。这不应该经常发生。如果有另一个客户端使用这个服务器,比如一个网站,那么网站上的用户可以花费 5 个货币,iOS 应用程序最初会通过缓存拉入 15 个货币,然后在服务器获取完成后更新为 10 .但我没有其他客户。只是iOS应用程序。所以这不应该发生。

然后,当应用程序的某个区域要执行需要货币的操作时,它会使用 fetchUserCurrencyWithCompletion,并等待完成以获取服务器结果,以确保用户有足够的货币来执行该操作。

这是设计这个的好方法吗?我还是新手,不确定最好的方法。

【问题讨论】:

  • 我曾经见过一种技术非常好用,因为它的技术含量太低了。基本上,服务器已设置好,以便您可以向它发出一个请求,除非发生变化,否则该请求不会返回。因此,您发出一个请求(超时时间很长),然后开始您的业务。如果请求完成,那么它会异步更新任何需要更新的内容。如果请求超时,它只会重新发出自己。不过,它确实占用了服务器端口和其他资源。

标签: objective-c oop


【解决方案1】:

实际上你在 B 点中提出的建议看起来非常好,但我也建议你做以下事情:

  1. 按照您的建议实施缓存
  2. 将此缓存存储在 iPhone 上的本地文件中
  3. 除非找不到文件,否则始终让您的方法返回本地缓存
  4. 现在从服务器更新本地货币值,既然你说它并不总是发生,所以简单地不要向你的服务器发送太多请求,只需使用 APNS(Apple 推送通知服务),从 iOS 7 开始,您可以在没有通知的情况下发送推送数据,因此每当货币更新时,您可以向 iPhone 发送推送数据,您的应用只需更新本地值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2014-10-21
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多