В Objective-C не существует такого понятия, как «константный объект». Есть const указатели и есть неизменные объекты. Вы говорите о константном указателе на неизменный объект, но вы не можете выделить его во время выполнения.
Для объектов, которые могут быть выделены во время компиляции (а я знаю только один, NSString
), вы можете сделать это:
NSString * const kMyString = @"string";
Это постоянный указатель на (неизменяемый) NSString
. Вы читаете эти вещи справа налево.
Чтобы создать то, что вы хотите, вам нужна функция или метод с внутренним static
, подобным этому:
+ (Something *)something {
static Something *something = nil;
if (! something) {
something = [Something new];
}
return something;
}
Это предпочтительнее, чем использовать глобальные переменные в любом случае для вещей, отличных от истинных констант (таких как строки и целые числа).
Вы должны убедиться, что Something
является неизменным.
РЕДАКТИРОВАТЬ Просто примечание о вышеуказанном коде. Это всего лишь пример того, как создать статический объект во время выполнения. Есть много способов сделать это с различными компромиссами, включая использование +initialize
со статическим файлом (который в настоящее время является моим предпочтительным способом создания синглтона). Не воспринимайте приведенный выше код как единственный способ. Это просто способ, который ближе всего к const
, потому что никакая другая часть программы не может напрямую попасть к указателю.