2016-11-22 33 views
1

这个问题不是关于技术问题,而是方法。单身人士与核心数据

我知道两分或多或少共同存储在您的应用程序从服务器接收到的数据的方法:

1)使用管理,数据持有人等来存储数据。他们通常是某种单身人士,用于存储从服务器接收到的模型。 (例如 - 帖子/地点/用户的数组)需要单身人士才能从任何屏幕访问数据。我认为大部分应用都使用这种方法。

2)使用Core Data(或者Realm)作为内存中的存储。这种方法避免了单身人士,但是,我认为,维护和支持有点复杂(并且有崩溃的风险)。

你如何存储数据,为什么?

P.S.任何答案都会有帮助。但是,对于详细的“谢谢”,有理由。

回答

2

CoreData并非严格意义上的“内存中”。您可以将对象加载到您的数据模型中,并将它们保存到上下文中,然后它们可能实际上位于磁盘上而不在主内存中,并且可以通过提取请求轻松将它们带回。

另一方面,单身人士通常会一直待在主内存中,直到用户终止应用程序。如果你在一些数据结构中存储着较大的对象(例如,当你真正需要的全部分辨率图像是一个缩略图),这可能是一个相当大的资源。

6

人们选择使用Core Data/Relam/Shark或任何其他iOS ORM的原因主要是为了保持持续之间的数据运行的应用程序之间的数据。

目前有两种方法可以做到这一点,对于单个值和非常小(并非我鼓励它)的对象,您可以使用UserDefaults在应用程序启动之间持续存在。对于更接近数据库的方法,实际上就核心数据和SharkORM而言,它们建立在SQLite之上,您需要使用ORM。

使用管理器来存储数据模型的数组将只在应用程序的整个生命周期中保留所述模型。例如,当用户强制退出应用程序时,重新启动其设备,或者在某些情况下,当iOS终止您的应用程序时,所有数据将永久丢失。这是因为它存储在易失性存储器的RAM中,而不是存储在磁盘本身的数据库中。

尽管在启动之间没有明确要求持久性,但使用数据库层也可以有其优点;例如SharkORM允许你在你的对象上执行原始的SQL查询,如果你不想使用强大的查询构建器。这可以用于快速拉取您感兴趣的模型,而不是遍历本地数组。

回复您的问题,如何存储数据?那么,我使用三者的组合。比方说,我为某个API调用了一些我想在那里显示的数据,然后向用户显示,我将使用带有数组的管理器实例来保存数据模型。 但是,如果我想稍后存储该数据,或者如果我需要对其执行复杂查询,我会使用Shark将其存储在磁盘上。 但是,如果我只是想存储用户是否已经看到我的登机流量,我只是坚持一个布尔值到UserDefaults

我希望这是对你不够详细。

+0

非常感谢。我所试图做的是我要自己来判断:我想用核心数据(无需坚持应用程序启动之间的数据),只是为了避免单身的缘故。或者单身人士可以在那里管理核心数据(或任何其他orm)可能需要太多的努力。 – Evgeniy

+1

有一些争论围绕着利用单身但这里是我作为一个经验丰富的iOS开发的意见:单身是罚款,并INFACT为数据源/经理的作用,他们是最好的解决方案。只有一个实例保持良好和轻量级,并且数据在那里并且易于访问。不要添加具有读取磁盘数据(这是远远低于RAM),如果你没有,因为这将远远超过资源保持单身在内存密集型的额外检修。但是,当你完成它们时,请清空对象阵列。 –

+0

我的经验是完全相反的,单身是通过定义一个内存泄漏和懒惰的程序员使用它们,以避免不必考虑对象生存期。专业代码不可接受。通过将ref放在应用程序委托的某个对象上,可以获得相同的结果,而不会引入无法解除分配的ref count循环 – MoDJ