所以我有这两种方法:
-(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。
第二个方法将这个字典写到一个文件中,以便在我的应用程序中的其他地方引用。
第一个方法经常被调用,第二个方法也是如此。但是,我知道,一旦构建并保存了字典,无论我调用这些方法的频率如何,它的内容都不会改变,因为可能值的数量是有限的。
问:考虑到第二个方法实际上只需要执行一次,我是应该添加一些行来检查文件是否已经存在,本质上是添加需要执行的代码,还是可以让它保持原样,一遍又一遍地覆盖现有文件?
我应该关心吗?我应该补充说,我似乎没有受到任何性能问题的困扰,所以这更多的是一个哲学/卫生问题。
谢谢
发布于 2016-02-27 20:26:43
那得看情况。
你说
构建并保存字典后,其内容将永远不会更改
在此之前:-)
如果你的应用程序在这个特定的循环中没有任何性能问题,我不会尝试缓存,原因是除非你以某种方式记住你在文件上只有一次写入,否则你会为以后存储一个bug。
这可以通过在方法上使用意图揭示名称来缓解。i.e
-(void)storeSubjectsOnceOnlyPerLaunch:(NSDictionary*)subjects如果我有时间追踪缓存引起的bug,我的生活中就会有好几天。
发布于 2016-02-28 01:19:07
您的解决方案完全是过度设计的,并且有大量出错的可能性。如果用户驱动器已满怎么办?是否备份此文件?它是否需要备份/您是否在浪费用户的时间进行备份?这会失败吗?你能处理好吗?你专注于数据的输入和存储,你应该专注于访问这些数据。
我有一个readwrite属性allEvents和一个属性eventAssociations,在接口中声明为readonly,但在实现文件中声明为readwrite。
allEvents设置器存储allEvents并将_eventAssociations设置为nil。eventAssociations获取方法检查_eventAssociations是否为空,并在需要时重新计算它。一种简单且防弹的模式。
https://stackoverflow.com/questions/35668652
复制相似问题