当我使用运行时函数sel_registerName在Objective-C程序中注册大量(10000+)其他选择器时,这会减慢我的程序吗?没有考虑注册这些选择器所需的时间。
祝你好运, 约亨
答案 0 :(得分:4)
如果要创建一个极其病态命名的选择器集,它只会在Objective-C的方法缓存中的选择器散列中的一个存储桶中堆叠,这只会减慢您的应用程序。
非常不可能。如果您发现性能问题,请使用Instruments(或其他工具)进行测量,并在尝试优化之前确定它的位置。
虽然rpetrich的答案是正确的,但每个选择器的RAM量是最小的。就选择器本身而言,它只是一个地址的数据。通常不使用实际的选择器值。如果选择器由静态分配的字符串组成,则实际上不会有任何内容触及内存(除非您的代码有效)。
如果要动态生成选择器名称,那么分配显然会占用内存。
(当然,我非常好奇为什么你会产生这么多选择器。相当不典型的模式!)
答案 1 :(得分:1)
不,但每个选择器必须驻留在内存中,并且不能取消注册。这将减少可用于其余应用程序的RAM量。