【发布时间】: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