我在 iOS 7 中编码,我的应用程序使用 Core Data。核心数据对我来说效果很好。
我写了一个例程,它将显示我的核心数据的大小和剩余的可用空间量,我对我所看到的有点困惑。
我的核心数据由三个文件 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 都没有改变。
最后,费用空间的变化表明已经消耗了 18,538,496 字节。但是 Next_ID 的变化表明它只使用了 14,852,096 个字节。所以,我似乎缺少 3,686,400 个字节。
这些是我的问题:
Q1:Next_ID.sqlite、PhotoSm.sqlite 和 PhotoLg.sqlite 是 SQLite 数据库中的表,所以问各个表有多大可能没有意义?
Q2:我在 Next_ID.sqlite 表的大小上发生了变化,这表明我在调整大小时可能正在测量整个数据库?发生这种情况是因为它是数据库中的第一个表?
当我创建空数据库时,所有三个表仍然显示 36,864 字节的大小,因此似乎存在一个初始结构并且可能包含空白空间。
Q3:那么,担心丢失 3,686,400 字节可能是徒劳的,因为 DB 的大小与放入其中的数据大小不是 1:1 的关系吗?
如果这些想法是正确的,那么:
Q4:我想知道是否有一种方法可以查询整个数据库的大小,而不会陷入表级别查询的混乱?
至于我用来运行查询的代码,我已经仔细研究过了,它没有抛出任何错误,作为测试,我已经用 stackoverflow 上工作示例中的代码替换了它,我总是得到相同的结果结果。