我想对存储在一个对象中的多个对象执行相同的操作NSSet
.
我的第一次尝试是使用快速枚举:
for (id item in mySetOfObjects)
[item action];
效果很好。然后我想到:
[mySetOfObjects makeObjectsPerformSelector:@selector(action)];
而现在,我不知道什么是最好的选择。据我了解,这两种解决方案是等效的。但是否有理由认为应该选择一种解决方案而不是另一种?
我会主张使用makeObjectsPerformSelector
,因为它允许 NSSet 对象处理自己的索引、循环和消息调度。编写 NSSet 代码的人很可能知道实现该特定循环的最佳方法。
在最坏的情况下,它们只会实现完全相同的循环,并且您获得的只是稍微干净的代码(不需要封闭循环)。充其量,他们做了一些内部优化,代码实际上会运行得更快。
Apple 的文档中简要提到了该主题代码速度性能 http://developer.apple.com/documentation/performance/Conceptual/CodeSpeed/Articles/CriticalCode.html文档中标题为“展开循环”的部分。
如果您担心性能,最好的办法是设置一个快速程序,对集合中的对象执行一些选择器。让它运行几百万次,并对两种不同情况之间的差异进行计时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)