CoreData:每次访问NSData属性时磁盘使用量都会增加

时间:2012-10-18 01:39:42

标签: ios xcode core-data instruments

TL:DR - 我有一个NSData属性,我保存了相机图像,每次访问该属性时,我的磁盘使用量都会增加。

长版: 我的应用程序有一个Photo类,用于保存从相机拍摄的照片。这是自动生成的代码:

@interface Photo : NSManagedObject

@property (nonatomic, retain) NSData * original;
@property (nonatomic, retain) NSData * thumbnail;
@property (nonatomic, retain) NSDate * createdAt;
@property (nonatomic, retain) Patient *patient;

@end

xcdatamodel文件中的*original*thumbnail都设置了Allows External Storage。每个照片对象在保存后使用大约4MB的空间。在代码中的某一点,我这样做:

NSData *original = photo.original

出于某种原因,第一次运行该行时,对于每个对象,应用程序的磁盘空间使用量增加4MB。由于某种原因,Core Data正在复制并再次保存photo.original

中包含的数据

我不知道为什么会发生这种情况,而且由于核心数据配置文件无法与设备配合使用,而且模拟器不支持相机,因此仪器没有帮助。

任何人对问题可能有什么想法?

2 个答案:

答案 0 :(得分:1)

对我来说听起来很合理。加载NSData实例时,系统将尝试将该缓冲区保留在内存中。但如果它们太大,您的数据将最终存储在虚拟内存中,并由缓存文件支持。在iPhone 4S上,最大的图像捕获是3264×2448,可以轻松转换为您所看到的4MB文件。

更改核心数据模型,以便只保留文件路径。然后将图像保存为单独的文件。

答案 1 :(得分:1)

考虑暂时更改持久性商店类型as outlined in Apple's documentation。 XML是调试的理想选择,因为速度不是问题。从那里,您可以直接打开商店文件,观察它的扩展程度。