Мне любопытно узнать о стоимости отправки сообщений в Objective-C в различных ситуациях. В частности, я хочу руководствоваться своим выбором дизайна программы, чтобы не испытывать соблазна преждевременной оптимизации, избегая отправки сообщений, когда они улучшат дизайн.
Случай в моем текущем проекте состоит в том, что у меня есть класс с переменными экземпляра: offsetX и offsetY. Я часто хочу абсолютное смещение, и на данный момент у меня есть эта строка кода повсюду: -
int absOffset = ((offsetX < 0.0) ? -offsetX : offsetX) +
((offsetY < 0.0) ? -offsetY : offsetY);
Теперь, если бы это был C ++, я бы создал встроенную функцию, которая бы возвращала значение для absOffset. Даже в Java / C # я мог определить такую функцию как final / sealed и быть уверен, что она будет встроенной.
Цель-C будет: -
-(int)absOffset {
return ((offsetX < 0.0) ? -offsetX : offsetX) +
((offsetY < 0.0) ? -offsetY : offsetY);
}
и я бы назвал это так: -
int ao = [self absOffset];
Теперь, может ли компилятор это встроить? Я предполагаю, что он может по крайней мере исправить это для прямого вызова функции и избежать динамической отправки сообщений, которую (я предполагаю) должен использовать target-c из-за своей системы типов.
Кроме того, в общем, сколько стоит отправка сообщений в target-C? Отличается ли он при вызове через id от указателя на конкретный класс?