Я вижу много кода для объективного c, который просто # определяет локальные константы, в которых он нуждается, и затем продолжает свой веселый путь. Проблема в том, что, насколько я знаю, #defines не ограничены. Многое из этого в собственном примере кода Apple. Например, в примере 5 TableViewSuite функция drawRect в TimeZoneView.m содержит следующий блок:
#define LEFT_COLUMN_OFFSET 10
#define LEFT_COLUMN_WIDTH 130
#define MIDDLE_COLUMN_OFFSET 140
#define MIDDLE_COLUMN_WIDTH 110
#define RIGHT_COLUMN_OFFSET 270
#define UPPER_ROW_TOP 8
#define LOWER_ROW_TOP 34
#define MAIN_FONT_SIZE 18
#define MIN_MAIN_FONT_SIZE 16
#define SECONDARY_FONT_SIZE 12
#define MIN_SECONDARY_FONT_SIZE 10
Есть ли причина, по которой я не понимаю, что это не абсурдно опасно? Как минимум, разве мы не должны #undef определять эти константы в конце функции?
Я полагаю, это мой вопрос:
Лучше ли определять, что вам нужно в файле, который вам нужен, и не определять его в конце? Или вы думаете, что лучше использовать статические константы для такого типа вещей? Есть ли какое-то снижение производительности при использовании статических констант, или компилятор может обрабатывать их так же эффективно, как #define?