当前位置:  开发笔记 > 编程语言 > 正文

Cocoa NSArray/NSSet:-makeObjectsPerformSelector:与快速枚举

如何解决《CocoaNSArray/NSSet:-makeObjectsPerformSelector:与快速枚举》经验,为你挑选了2个好方法。

我想对存储在a中的几个对象执行相同的操作NSSet.

我的第一次尝试是使用快速枚举:

for (id item in mySetOfObjects)
    [item action];

哪个工作得很好.然后我想到了:

[mySetOfObjects makeObjectsPerformSelector:@selector(action)];

而现在,我不知道什么是最好的选择.据我了解,这两种解决方案是等效的.但是,是否有理由选择一种解决方案而不是另一种?



1> e.James..:

我认为使用makeObjectsPerformSelector,因为它允许NSSet对象处理自己的索引,循环和消息调度.编写NSSet代码的人最有可能知道实现该特定循环的最佳方式.

在最坏的情况下,它们只是实现完全相同的循环,而你所获得的只是稍微清晰的代码(不需要封闭循环).充其量,他们进行了一些内部优化,代码实际上运行得更快.

Apple的Code Speed Performance文档中标题为"Unrolling Loops"的部分简要提到了该主题.

如果您担心性能,最好的办法是设置一个快速程序,在一组中的对象上执行一些选择器.让它运行数百万次,并计算两种不同情况之间的差异.



2> daveMac..:

我也被问到了这个问题.我在Apple文档"集合:对象的无序集合 "下的"集合编程主题"中找到以下内容:

NSSet方法objectEnumerator允许您逐个遍历集合的元素.andmakeObjectsPerformSelector:和makeObjectsPerformSelector:withObject:方法用于将消息发送到集合中的各个对象.在大多数情况下,应该使用快速枚举,因为它比使用NSEnumerator或makeObjectsPerformSelector:方法更快,更灵活.有关枚举的更多信息,请参阅"枚举:遍历集合的元素".

这让我相信Fast Enumeration仍然是这个应用程序最有效的方法.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有