【发布时间】:2012-06-01 05:41:50
【问题描述】:
这篇文章http://www.gnustep.org/resources/ObjCFun.html指出
在任何时间很关键的地方,Objective-C 都可以将消息预先绑定到其实现中,从而避免昂贵的消息查找。
您如何进行此预绑定?这与选择器无关,是吗?
【问题讨论】:
标签: objective-c message prebinding
这篇文章http://www.gnustep.org/resources/ObjCFun.html指出
在任何时间很关键的地方,Objective-C 都可以将消息预先绑定到其实现中,从而避免昂贵的消息查找。
您如何进行此预绑定?这与选择器无关,是吗?
【问题讨论】:
标签: objective-c message prebinding
它涉及实现。 考虑以下因素(如果您获得参考,则 +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 动态查找要快得多,因为它只是调用方法,并且没有额外的运行时代码。
不利的一面是,这很快会使代码难以阅读,因此请谨慎使用,如果有的话。
【讨论】: