Objective-C: функциональный макрос против. Метод

#objective-c #performance #function #methods #macros

#objective-c #Производительность #функция #методы #макросы

Вопрос:

В Objective-C, когда вы рекомендуете использовать функциональный макрос вместо методов класса или экземпляра?

Ответ №1:

Это очень разные вещи. Функция или метод существует в вашем коде ровно один раз; макрос вставляет свое полное определение в ваш код каждый раз, когда вы его используете.

Некоторые люди используют в своих интересах тот факт, что короткий макрос может превратиться в фрагмент кода, скорее похожий на дешевую замену шаблонам в стиле C . Одноэлементный макрос Мэтта Галлахера является одним из примеров. Как и в случае с шаблонами, чрезмерное использование больших макросов может привести к удивительно большому коду и большой головной боли при отладке.

Помимо констант и крошечных выражений, если вы можете использовать функцию или метод вместо макроса, вам, вероятно, следует.

Ответ №2:

Трудно понять, о чем вы на самом деле спрашиваете, но я бы рекомендовал использовать функции поверх макросов в качестве общего правила, поскольку они выполняют проверку типов, показывают более четкое намерение и облегчат отладку.

Ответ №3:

На мой взгляд, никогда. Макросы — это эффективные инструменты подстановки текста, которые работают на уровне компилятора, а не во время выполнения вашего кода. Это полезно для определения констант и тому подобного, но не подходит для более сложных вещей.

Функциональные макросы, похоже, используются, когда в коде много повторений, поэтому вам не нужно поддерживать одну и ту же процедуру в тринадцати разных местах. Однако, если вы можете успешно использовать макрос таким образом, ваш код плохо организован — вам, вероятно, было бы лучше провести его рефакторинг и создать единый метод для его реализации.

Ответ №4:

Я думаю, что макросы лучше использовать при выполнении конфиденциальных операций, поскольку это затрудняет отладку.

Например, вместо использования такого метода, как isJailBroken(), который возвращает логическое значение, можно использовать макрос, чтобы выяснить, взломано ли устройство.

Это затрудняет работу злоумышленника по выполнению манипуляций во время выполнения!

Комментарии:

1. Привет, проголосовавший против, не могли бы вы, пожалуйста, прокомментировать, почему проголосовали против моего ответа? Я прочитал статью о защите от манипуляций во время выполнения по ссылке ниже и подумал примерно так. resources.infosecinstitute.com /…