Есть еще одно решение в дополнение к Юджи. Вы можете создать функцию и добавить к ней префикс с помощью атрибута GCC (также работает в Clang и LLVM), который будет выполнять ее раньше, чем main()
. Я использовал этот подход несколько раз, и он выглядит примерно так:
static NSString *foo;
__attribute__((constructor)) initializeFoo() {
foo = ...;
}
Когда вы на самом деле используете foo
, он уже будет инициализирован. Это означает, что вам не нужно проверять, является ли он nil
каждый раз. (Это, безусловно, незначительное преимущество в производительности, хотя и умноженное на количество раз его использования, но оно также может упростить одну или несколько других областей кода. Например, если вы ссылаетесь на статическую переменную в N разных местах, вы можете проверить на nil
во всех буквах N или рискнуть сбой. Часто люди вызывают функцию или используют #define
для обработки инициализации, и если этот код используется только один раз, это может быть штрафом за удаление.