2

这篇文章http://www.gnustep.org/resources/ObjCFun.html指出

在任何时间很关键的地方,Objective-C 都可以将消息预先绑定到其实现中,从而避免昂贵的消息查找。

您如何进行此预绑定?这与选择器无关,是吗?

4

1 回答 1

3

它涉及实现。考虑以下内容(如果您获得参考,则 +1 互联网):

NSArray *myReallyLongArrayOf1000items;

for (int i = 0; i < 1000; i++)
    NSLog(@"%@", [myReallyLongArrayOf1000items objectAtIndex:i]);

obj-c 运行时需要时间来准确查找如何执行-objectAtIndex:任务。因此,当我们将代码块更改为:

NSArray *myReallyLongArrayOf1000items;

id (*objectAtIndex)(NSArray *, SEL, int) = (typeof(objectAtIndex)) [myReallyLongArrayOf1000items methodForSelector:@selector(objectAtIndex:)];

for (int i = 0; i < 1000; i++)
    NSLog(@"%@", objectAtIndex(myReallyLongArrayOf1000items, @selector(objectAtIndex:), i);

这使用了一个 C 函数指针,这比使用 Objective-c 的动态查找快得多,因为它只是调用方法,并且没有额外的运行时代码。

不利的一面是,这很快使代码难以阅读,因此请谨慎使用,如果有的话。

于 2012-05-25T16:13:13.180 回答