【问题标题】:coding efficiency vs execution efficiency编码效率与执行效率
【发布时间】:2016-02-27 10:36:49
【问题描述】:

所以我有这两种方法:

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

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

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

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

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

谢谢

【问题讨论】:

  • 您提到“在我的应用程序的其他地方供参考”。所以你写入磁盘的唯一原因是从同一个应用程序中的其他地方再次打开它?那你为什么不把它存储在一个变量中以便以后访问数据呢?
  • 因为应用程序可能会被强制退出,并且我需要依赖这样一个事实,即在重新启动时执行任何代码之前这些信息是可用的

标签: objective-c performance


【解决方案1】:

视情况而定。

你说

字典一旦建立并保存,其内容就永远不会改变

直到他们这样做:-)

如果您的应用在此特定循环中没有遇到任何性能问题,我不会尝试缓存,原因是除非您以某种方式记住您在存储错误的文件上只有一次写入之后。

这可以通过在方法上使用一个显示意图的名称来缓解。即

-(void)storeSubjectsOnceOnlyPerLaunch:(NSDictionary*)subjects

如果我有时间来追查缓存引起的错误,我的生活会有几天的时间。

【讨论】:

    【解决方案2】:

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

    我有一个读写属性 allEvents 和一个属性 eventAssociations,在接口中声明为只读,但在实现文件中声明为读写。

    allEvents 设置器存储 allEvents 并将 _eventAssociations 设置为 nil。 eventAssociations getter 检查 _eventAssociations 是否为 nil,并在需要时重新计算。一个简单而防弹的模式。

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2016-12-08
      • 2012-02-02
      • 2019-05-01
      • 2011-08-28
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多