这个问题不是技术问题,而是方法。
我知道在您的应用中存储从服务器接收的数据的两种或多种常见方法:
1)使用经理,数据持有者等来存储数据。它们通常是某种单例,用于存储从服务器接收的模型。 (例如,帖子/地点/用户的数组)单身人士需要能够从任何屏幕访问数据。我认为大多数应用程序都使用这种方法。
2)使用核心数据(或Realm)作为内存存储。这种方法避免了单例,但是,我想,维护和支持它会更复杂(并且有崩溃风险)。
如何存储数据?为什么?
P.S。任何答案都会有帮助。但有很大的“谢谢”,有详细的原因。
答案 0 :(得分:6)
人们选择使用Core Data / Relam / Shark或任何其他iOS ORM的原因主要是为了在应用程序运行之间持久数据。
目前有两种方法可以实现这一点,对于单个值和非常小(不是我鼓励它)的对象,您可以使用UserDefaults
在应用程序启动之间保持不变。对于更接近数据库的方法,实际上在Core Data和SharkORM的情况下,它们构建在SQLite之上,您需要使用ORM。
使用管理器存储数据模型数组只会在应用程序的生命周期内保留所述模型。例如,当用户强制退出应用程序时,重新启动其设备,或者在某些情况下,当iOS终止您的应用程序时,所有数据都将永久丢失。这是因为它存储在RAM中,它是易失性存储器,而不是存储在磁盘本身的数据库中。
即使你没有特别要求在发布之间保持持久性,使用数据库层也会有其优势;例如,如果您不想使用内置的强大查询构建器,SharkORM允许您对对象执行原始SQL查询。这对于快速拉出您感兴趣的模型非常有用,而不是迭代本地数组。
在回答您的问题时, I 如何存储数据?
好吧,我使用了三者的组合。比方说,我调用了一些API,我想在那里显示一些数据,然后再向用户显示,我会使用带有数组的管理器实例来保存数据模型。
但另一方面,如果我想存储该数据以供日后使用,或者如果我需要对其执行复杂查询,我会使用Shark将其存储在磁盘上。
但是,如果我只是想存储用户是否已经看到我的登机流程,我只会将一个布尔值保存到UserDefaults
。
我希望这对你来说足够详细。
答案 1 :(得分:2)
CoreData并非严格意义上的“内存中”。您可以将对象加载到数据模型中并将它们保存到上下文中,然后它们实际上可能位于磁盘上并且不在主内存中,并且可以通过提取请求轻松地将它们带回来。
另一方面,单身人士通常会一直留在主记忆中,直到用户终止该应用程序。如果你有一些较大的对象存储在一些数据结构中(例如,当你真正需要的只是一个缩略图时的全分辨率图像),这可能是一个非常耗费资源。