Objective c 什么';当值';是从服务器来的吗?

Objective c 什么';当值';是从服务器来的吗?,objective-c,oop,Objective C,Oop,我有服务器端表“user”和“user\u currency” 在我的前端iOS应用程序中,我希望能够在应用程序的各个区域检索用户的当前货币(应用程序内货币)金额。例如,它将显示在应用程序中的几乎每个视图上,显示它们当前拥有的数量。当执行需要货币的操作时,也将使用该选项 如何设置这一最佳方案 A) 假设我们只有一个名为fetchUserCurrencyWithCompletion的方法。此方法将异步从服务器获取数据,然后调用方需要在完成块中提供一些关于如何处理数据的代码。这有一个问题。如果应用程

我有服务器端表“user”和“user\u currency”

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

如何设置这一最佳方案

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

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

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


这是设计这个的好方法吗?我还是个新手,不知道最好的方法是什么。

实际上,你在B点中提出的建议似乎很好,但我也建议你做以下几点:

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

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