0

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

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

NSData *original = photo.original

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

我不知道为什么会发生这种情况,并且 Instruments 没有帮助,因为核心数据配置文件不适用于设备并且模拟器不支持相机。

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

4

2 回答 2

1

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

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

于 2012-10-18T02:04:17.693 回答
1

考虑暂时更改您的持久存储类型,如 Apple 文档中所述。XML 是调试的好选择,因为速度不是问题。从那里您可以直接打开您的商店文件并观察它的扩展情况。

于 2012-10-18T02:31:15.537 回答