Core data 如何理解我在调整核心数据时看到的内容?

Core data 如何理解我在调整核心数据时看到的内容?,core-data,ios7,Core Data,Ios7,我使用iOS 7进行编码,我的应用程序使用核心数据。核心数据对我来说运行良好 我写了一个例程,它将显示我的核心数据的大小和剩余的可用空间,我对我看到的有点困惑 我的核心数据由三个文件组成:Next_ID.sqlite、PhotoSm.sqlite和PhotoLg.sqlite 当我刚刚创建了一个新数据库时,我的结果如下所示: Next_ID = 36,864 bytes PhotoSm = 36,864 bytes PhotoLg = 36,864 bytes Free = 1,507,3

我使用iOS 7进行编码,我的应用程序使用核心数据。核心数据对我来说运行良好

我写了一个例程,它将显示我的核心数据的大小和剩余的可用空间,我对我看到的有点困惑

我的核心数据由三个文件组成:Next_ID.sqlite、PhotoSm.sqlite和PhotoLg.sqlite

当我刚刚创建了一个新数据库时,我的结果如下所示:

Next_ID = 36,864 bytes
PhotoSm = 36,864 bytes
PhotoLg = 36,864 bytes
Free    = 1,507,385,344 bytes
在我向数据库中添加10或15项后,数字如下所示:

Next_ID = 14,888,960 bytes
PhotoSm = 36,864 bytes
PhotoLg = 36,864 bytes
Free    = 1,488,846,848 bytes
首先,我很惊讶Next_ID的变化如此之大,实际上,它只是用来保持一个唯一的整数,每次我向数据库添加新数据时,这个整数都会发生变化

接下来,我很惊讶PhotoSm和PhotoLg都没有改变

最后,费用空间的变化表明消耗了18538496字节。但是Next_ID中的更改显示它只使用了14852096字节。所以,我似乎缺少3686400字节

以下是我的问题:

问题1:Next_ID.sqlite、PhotoSm.sqlite和PhotoLg.sqlite都是sqlite数据库中的表,所以问单个表有多大可能没有意义

问题2:我对Next_ID.sqlite表的大小进行了更改,这一事实表明,当我调整数据库的大小时,我可能得到了整个数据库的一个度量?这是因为它是数据库中的第一个表

当我创建DB empty时,所有三个表仍然显示36864字节的大小,因此似乎存在一个初始结构,可能包含空空间

问题3:因此,担心丢失的3686400字节可能是一件愚蠢的事情,因为数据库的大小与放入其中的数据大小之间没有1:1的关系

如果这些想法是正确的,那么:

问题4:我想知道是否有一种方法可以查询整个数据库的大小,而不会陷入表级查询的混乱


至于我用来运行查询的代码,我已经仔细研究过了,它没有抛出错误,作为测试,我用stackoverflow上的工作示例中的代码替换了它,我总是得到相同的结果。

@bneely是对的-CoreData不仅仅是一个数据库前端。我敢肯定,您的操作是错误的——这会造成兆字节的损失,并使nextId表有如此巨大的增长。首先考虑阅读,至少是技术概览。 关于你的问题:
A1:是的,如果您使用CoreData,那么询问单个表的大小是没有意义的。CoreData是一个对象图,其内部存储实现(表、关系等)是隐藏的。
A2:我几乎可以肯定,您正在使用Next_ID.sqlite初始化持久存储协调器,所以它不是表,而是数据库。而且它的大小(可能)会增长,因为您将图像存储在CoreData中(这肯定是错误的模式)。
什么是免费尺码?什么的免费尺寸?这个设备的闪光灯?它可能会因其他应用程序的活动而更改。获得免费尺码似乎是胡说八道。
A4:


再者,学习如何使用你所使用的技术。你的问题表明了对CoreData主要观点的误解——苹果已经写了大量关于CoreData的文档。必须阅读,否则您每天都会对CoreData感到头疼。

您是如何获得这些数字的?为什么它对你很重要?核心数据不仅仅是一个数据库前端,实际的数据库内容和大小是一个与您无关的实现细节。@B尼利和佩特罗,你们都表示我对核心数据有一些深刻的误解。所以,我将接受你的建议,或者去重读你引用的所有材料,并做一个全面的回顾。谢谢你的想法。