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