gpt4 book ai didi

ios - 自定义访问器比核心数据中的自动访问器慢得多

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:17 25 4
gpt4 key购买 nike

我正试图找出我在 Core Data 中看到的一件奇怪的事情。我创建了一个示例项目来显示这里的问题 - https://github.com/mattjgalloway/CocoaBugs/tree/master/CoreDataSlowSetters

我在 Core Data 建模对象上有两个不同的属性。一种使用动态创建的二传手。一个使用自定义 setter ,它只做这个:

- (void)setCustom:(NSString *)custom {
[self willChangeValueForKey:@"custom"];
[self setPrimitiveCustom:custom];
[self didChangeValueForKey:@"custom"];
}

如果我使用每个 setter 进行检测,我发现自定义 setter 比自动 setter 慢得多(慢约 3 倍)。

在该示例项目中,我正在执行以下紧密循环来显示问题:

for (int i = 0; i < 1000000; i++) {
Entity *entity = [Entity insertInManagedObjectContext:self.managedObjectContext];
entity.generic = @"something"; ///< Time profiler shows 6.3% time here
entity.custom = @"something"; ///< Time profiler shows 19.9% time here
}

[注意:我正在使用 mogenerator,因此使用了 insertInManagedObjectContext: 辅助方法。]

还有其他人看到过这个问题吗?我试过寻找自动生成的访问器的作用,它似乎与我的自定义访问器没有什么不同。

我只是运气不好,如果您自己实现访问器,那么它只会慢很多

我还没有提交雷达,但我会尽快提交。

最佳答案

我认为提交雷达没有意义。正如 Martin 所指出的,毫无疑问,生成的访问器正在进行一些优化。

这遵循了 Apple 最近一直强调的路径,不要创建自定义访问器。由于访问器应该只访问它们的属性,因此没有理由再创建自定义的。您认为想要放入访问器的任何逻辑都应该放在其他地方。

现在你有数学来支持这个规则:)

关于ios - 自定义访问器比核心数据中的自动访问器慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com