有大量的选择器会减慢Objective-C程序的速度吗?

时间:2010-01-20 02:04:08

标签: objective-c performance

当我使用运行时函数sel_registerName在Objective-C程序中注册大量(10000+)其他选择器时,这会减慢我的程序吗?没有考虑注册这些选择器所需的时间。

祝你好运, 约亨

2 个答案:

答案 0 :(得分:4)

如果要创建一个极其病态命名的选择器集,它只会在Objective-C的方法缓存中的选择器散列中的一个存储桶中堆叠,这只会减慢您的应用程序。

非常不可能。如果您发现性能问题,请使用Instruments(或其他工具)进行测量,并在尝试优化之前确定它的位置。

虽然rpetrich的答案是正确的,但每个选择器的RAM量是最小的。就选择器本身而言,它只是一个地址的数据。通常不使用实际的选择器值。如果选择器由静态分配的字符串组成,则实际上不会有任何内容触及内存(除非您的代码有效)。

如果要动态生成选择器名称,那么分配显然会占用内存。

(当然,我非常好奇为什么你会产生这么多选择器。相当不典型的模式!)

答案 1 :(得分:1)

不,但每个选择器必须驻留在内存中,并且不能取消注册。这将减少可用于其余应用程序的RAM量。