下列哪个更快?为什么?

CGFloat sum = 0;
for (UIView *v in self.subviews)
    sum += v.frame.size.height;

或者
CGFloat sum = [[self.subviews valueForKeyPath:@"@sum.frame.size.height"] floatValue];

最佳答案

实际上,语言的优美程度(或巧妙程度)很大程度上取决于避免循环的程度。一会儿甚至快速枚举表达式也很麻烦。无论您如何加糖,循环都将是一块代码,该代码块执行的操作用自然语言描述起来要简单得多。

“给我这个数组中所有员工的平均薪水”,

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更快。

希望对您有帮助。

关于iphone - KVC与快速枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16337362/

10-10 20:30