Предварительно связывающее сообщение, чтобы избежать поиска метода

В этой статье 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, поскольку он просто вызывает метод и не требует дополнительного кода времени выполнения.

С другой стороны, это быстро затрудняет чтение кода, поэтому используйте его экономно, если вообще.

Другие вопросы по тегам