我必须将代码放在 AppDelegate 上的什么地方?
这取决于您决定下载数据的应用程序的行为。通常,如果您的应用程序应该在每次进入新视图时显示最新数据,则应在访问该视图时下载数据。这样,您将始终向用户显示最新的可用数据。
您通常会避免在application: didFinishLaunchingWithOptions:中投入太多,尤其是网络连接,因为您不知道用户可能拥有什么样的连接。如果连接需要很长时间并且应用程序:didFinishLaunchingWithOptions:需要太长时间才能返回 iOS 会因为打开时间过长而终止您的应用程序,这根本不利于用户体验。
我如何知道服务器上的某些数据是否已更改?
您将希望在来自服务器的响应的标头中传递最后修改的时间戳或 etag。当您从服务器获得标头响应时,您可以检查您收到的上一个上次修改的数据,或者如果 etag 不同,您就知道数据已更改。这样做比下载所有正文以检查单个参数要快得多,如果该参数没有更改,那么您只是下载了一堆数据。我不鼓励版本控制,版本控制更多地用于 API 更改,而不是检查数据是否过时。
存储位置?
这取决于您要下载的数据量,但我建议通常使用核心数据。将数据存储到文件然后保存该文件的问题在于,每次打开应用程序时,您都必须将该数据分解为可用的东西,然后才能搜索它等。使用核心数据,您将拥有完全形成的对象您可以使用 NSPredicate 进行搜索,从长远来看,这会使一切变得更容易使用。
如果您只是下载一些设置,那么您可以使用文件或 NSUserDefaults 之类的东西,但如果您要向用户显示数据列表或数据集合,最好使用核心数据。