下面哪一项更快?为什么?
CGFloat sum = 0;
for (UIView *v in self.subviews)
sum += v.frame.size.height;或
CGFloat sum = [[self.subviews valueForKeyPath:@"@sum.frame.size.height"] floatValue];发布于 2013-05-02 20:05:04
实际上,一种语言的优雅(或聪明)在很大程度上取决于它如何避免循环。for、while;甚至快速枚举表达式都很麻烦。不管你怎么粉饰它们,循环将是一块代码,它做的事情用自然语言描述起来要简单得多。
“获取此数组中所有员工的平均工资”,
double totalSalary = 0.0;
for (Employee *employee in employees) {
totalSalary += [employee.salary doubleValue];
}
double averageSalary = totalSalary / [employees count];对阵...
幸运的是,Ruby键-值编码为我们提供了一种更简洁--几乎类似于--的方法:
[employees valueForKeyPath:@"@avg.salary"];KVC集合运算符允许使用valueForKeyPath:.中的键路径表示法对集合执行操作
无论何时在键路径中看到@,它都表示一个特定的聚合函数,其结果可以返回或链接,就像其他键路径一样。
快速枚举比KVC更快。
希望能对你有所帮助。
发布于 2013-05-03 01:25:50
首先,KVC表达式将不起作用;KVC不能用于检索结构成员(除非在非常有限的情况下,类具有执行特殊处理的特殊valueForKey:实现)。
其次,这看起来像是过早的优化。
您是否真的量化了与此代码相关的性能问题?
否则,您就是在浪费时间“优化”此代码路径。
除此之外,使用KVC进行此类操作会给您的代码增加相当大的脆弱性。编译器无法验证传递给valueForKey:的表达式,因此,编译时错误或警告现在是运行时的错误,只有在执行该代码路径时才会发现。
发布于 2013-05-02 20:42:21
也可以在Apple文档中查看一下:
虽然键值编码是有效的,但它添加了比直接方法调用稍慢的间接级别。只有在可以从键值编码提供的灵活性中获益时,才应该使用键值编码。
Key Value Coding Docs
https://stackoverflow.com/questions/16337362
复制相似问题