Вы не можете так делать.
const NSString *global;
NSString const *global;
оба означают указатель (который можно изменить) на постоянный NSString
объект. В Objective-C постоянные объекты не имеют смысла. Компилятор не может обеспечить константность объектов. Он не может знать, изменяет ли метод внутреннее состояние объекта или нет. Также все классы в библиотеке всегда принимают указатели на непостоянные объекты в качестве параметров для своих методов, поэтому наличие любых указателей на константные объекты вызовет много предупреждений.
С другой стороны, существуют постоянные указатели на объекты, которые объявлены так:
NSString * const global;
Это означает, что указатель указывает на обычный объект NSString, но его значение нельзя изменить. Это означает, что вам также нужно инициализировать значение указателя (его нельзя изменить позже). Это используется для определения констант. Но это работает только с NSStrings
и строковыми литералами. Для всех других классов нет способа указать постоянный объект времени компиляции, необходимый для инициализации. И в этом случае это истинная константа - строковые литералы неизменны по определению.
Но в вашем случае вы можете покончить с const
. Вы хотите изменить указатель позже, чтобы он не мог быть NSString * const
. Если вы настаиваете на глобальном, вам просто нужно сделать его регулярным NSString *
. С другой стороны - глобалы - это зло. Вы должны изменить свой дизайн, чтобы он вам не понадобился.