当它来自服务器时,立即访问价值的最佳方式是什么?

时间:2015-02-20 19:30:42

标签: objective-c oop

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

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

最好如何设置?

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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