编码效率与执行效率

时间:2016-02-27 10:36:49

标签: objective-c performance

所以我有这两种方法:

-(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。

第二种方法将此字典写入文件,以供我的应用程序中的其他地方参考。

第一种方法经常被调用,第二种方法也是如此。但是,我知道,一旦字典被构建和保存,无论我多久调用这些方法,它的内容都不会改变,因为可能值的数量是有限的。

问题:鉴于第二种方法基本上只需执行一次,我应该添加一些行来检查文件是否已经存在,实质上是添加需要执行的代码,还是我可以保留原样,一遍又一遍地覆盖现有文件?

我应该在意吗?我应该补充一点,我似乎不会遇到任何性能问题,所以这更像是一个哲学/卫生问题。

感谢

2 个答案:

答案 0 :(得分:1)

取决于。

你说

  

一旦构建并保存了字典,其内容就不会改变

直到他们这样做: - )

如果您的应用程序没有遇到此特定循环的任何性能问题,我不会尝试缓存,除非您以某种方式记住您对文件进行了一次只写,否则会存储错误后来。

这可以通过在方法上使用意图揭示名称来减轻。即

-(void)storeSubjectsOnceOnlyPerLaunch:(NSDictionary*)subjects

如果我有时间追回缓存缓存导致的错误,那么我的生命中会有好几天的时间。

答案 1 :(得分:0)

您的解决方案完全过度设计,并且有很多可能出错的地方。如果用户开车满了怎么办?此文件是否已备份?是否需要备份/是否浪费用户时间备份?这会失败吗?你在处理吗?您专注于输入和存储数据,您应该专注于访问该数据。

我有一个readwrite属性allEvents和一个属性eventAssociations,在接口中声明为readonly,但在实现文件中是readwrite。

allEvents setter存储allEvents并将_eventAssociations设置为nil。 eventAssociations getter检查_eventAssociations是否为nil并在需要时重新计算它。一种简单的防弹图案。