Предварительно связывающее сообщение, чтобы избежать поиска метода
В этой статье http://www.gnustep.org/resources/ObjCFun.html говорится, что
Везде, где это время критично, в Objective-C возможно предварительно связать сообщение с его реализацией, что позволяет избежать дорогостоящего поиска сообщений.
Как вы делаете эту предварительную привязку? Это не о селекторах, не так ли?
1 ответ
Это включает в себя реализации. Рассмотрим следующее (+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, который намного быстрее, чем динамический поиск при использовании target-c, поскольку он просто вызывает метод и не требует дополнительного кода времени выполнения.
С другой стороны, это быстро затрудняет чтение кода, поэтому используйте его экономно, если вообще.