所以我有这两种方法:
-(void)importEvents:(NSArray*)allEvents {
NSMutableDictionary *subjectAssociation = [[NSMutableDictionary alloc] init];
for (id thisEvent in allEvents) {
if (classHour.SubjectShort && classHour.Subject) {
[subjectAssociation setObject: classHour.Subject forKey:classHour.SubjectShort];
}
}
[self storeSubjects:subjectAssociation];
}
-(void)storeSubjects:(NSMutableDictionary*)subjects {
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *subjectsList = [documentsDir stringByAppendingPathComponent:@"Subjects.plist"];
[subjects writeToFile:subjectsList atomically:YES];
}
第一个循环遍历一个让我们说100项的数组,并构建一个大约10个唯一键/值对的NSMutableDictionary。
第二种方法将此字典写入文件,以供我的应用程序中的其他地方参考。
第一种方法经常被调用,第二种方法也是如此。但是,我知道,一旦字典被构建和保存,无论我多久调用这些方法,它的内容都不会改变,因为可能值的数量是有限的。
问题:鉴于第二种方法基本上只需执行一次,我应该添加一些行来检查文件是否已经存在,实质上是添加需要执行的代码,还是我可以保留原样,一遍又一遍地覆盖现有文件?
我应该在意吗?我应该补充一点,我似乎不会遇到任何性能问题,所以这更像是一个哲学/卫生问题。感谢
答案 0 :(得分:1)
取决于。
你说
直到他们这样做: - )一旦构建并保存了字典,其内容就不会改变
如果您的应用程序没有遇到此特定循环的任何性能问题,我不会尝试缓存,除非您以某种方式记住您对文件进行了一次只写,否则会存储错误后来。
这可以通过在方法上使用意图揭示名称来减轻。即
-(void)storeSubjectsOnceOnlyPerLaunch:(NSDictionary*)subjects
如果我有时间追回缓存缓存导致的错误,那么我的生命中会有好几天的时间。
答案 1 :(得分:0)
您的解决方案完全过度设计,并且有很多可能出错的地方。如果用户开车满了怎么办?此文件是否已备份?是否需要备份/是否浪费用户时间备份?这会失败吗?你在处理吗?您专注于输入和存储数据,您应该专注于访问该数据。
我有一个readwrite属性allEvents和一个属性eventAssociations,在接口中声明为readonly,但在实现文件中是readwrite。
allEvents setter存储allEvents并将_eventAssociations设置为nil。 eventAssociations getter检查_eventAssociations是否为nil并在需要时重新计算它。一种简单的防弹图案。