1

创建 iOS 程序时,如果我绕过 SEL(@selectors)并在其他类中调用它们,是否会对性能造成影响?这是否比正常的方法调用慢得多?

4

3 回答 3

2

为什么来自其他类的消息传递(ObjC 著名的一件事)会对性能造成影响?当然,与 C 函数相比,存在一些开销(由于在方法中增加了两个部分)。选择器只是简单的数据类型,因此将它们传递给 SEL 类型并不比发送 BOOL 或 int 更昂贵。但是,要从传递的选择器中实际调用 SEL 类型,建议创​​建 NSInvocation 对象,这会稍微增加开销时间。

而且您在 objC 中或多或少是安全的,因为给 nil 的消息(您确实提到了其他类)会产生 nil。

于 2012-05-24T12:28:47.120 回答
0

好吧,除了在第一次运行时,它可能没有太大的影响,因为编译器会在编译时创建对每个对象的引用,并且它的依赖关系以及类,所以在加载时它可能会有点慢(在非常大的程序中也是如此......)但此后不多,只要在中间步骤中创建的对象不是很大,而且它不涉及任何大型动态操作,因为这里我只谈论调用本地函数并从不同的类调用相同的函数。

无论如何,您为什么要使用选择器来引用不同类中的某些函数。

于 2012-05-24T12:24:15.873 回答
0

据我所知,选择器只是方法名称的编码。鉴于在 Objective-C 中方法是通过向对象发送消息来调用的,我不明白为什么显式方法调用 ( [object method]) 和隐式调用 ( [objectDelegate selector]) 之间应该存在性能差异。

于 2012-05-24T12:28:56.977 回答