我有一个iOS应用程序,使用NSCoding持久化数据,更确切地说是NSKeyedArchiver.此应用程序已在App Store上提供.
我正在研究应用程序的第2版,数据模型应该改变.所以我需要处理数据模型迁移.我希望它由单元测试覆盖.
在我的测试中,我想用旧数据模型动态生成持久化数据,启动迁移并查看是否一切顺利.
目前,归档对象如下所示:
MyDataModelObject *object = ....
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:object forKey:key];
[archiver finishEncoding];
Run Code Online (Sandbox Code Playgroud)
问题是,MyDataModelObject可能会在应用程序的版本2中重新计算甚至删除.所以我不能在我的测试中使用这个类来生成"旧版本档案".
有没有办法在encodeWithCoder:不使用此类的情况下模拟类方法中的操作?
我想要实现的目标如下
- testMigrationFrom_v1_to_v2 {
// simulate an archive with v1 data model
// I want this part of the code to be as simple as possible
// I don't want to rely on old classes to generate the archive
NSDictionary *person = ... // { firstName: John, lastName: Doe }
NSDictionary *adress = ... // { …Run Code Online (Sandbox Code Playgroud) 我正在iOS上进行图像缓存.图像从URL下载并作为UIImage存储在NSDictionary中(我不想或不需要"在磁盘上"缓存).
问题是:我应该将图像存储在我的字典中作为UIImage还是NSData?哪一个在记忆方面明显更小?