Spec-Zone.ru › GCC 11

Следующая: compatibility_alias, Предыдущая: Уборка мусора, Наверх: Функции GNU Objective-C [Оглавление][Индекс]

8.5 Объекты константных строк ¶

GNU Objective-C предоставляет объекты константных строк, которые генерируются непосредственно компилятором. Вы объявляете объект константной строки, добавив символ «@» перед строкой-константой C:

id myString = @"this is a constant string object";

Объекты константных строк по умолчанию являются экземплярами класса NXConstantString, который предоставляется временем выполнения GNU Objective-C. Для получения определения этого класса необходимо включить заголовочный файл objc/NXConstStr.h.

Пользовательские библиотеки могут захотеть реализовать собственный класс константных строк. Для поддержки этого GNU Objective-C компилятор предоставляет новую командную опцию -fconstant-string-class=имя_класса. Предоставленный класс должен соответствовать строгой структуре, такой же, как у NXConstantString:

@interface MyConstantStringClass
{
  Class isa;
  char *c_string;
  unsigned int len;
}
@end

NXConstantString наследуется от Object; пользовательские библиотеки могут выбрать наследование от другого класса, отличного от Object. Нет никаких требований к методам, которые должен реализовать класс константных строк, но окончательная структура ivar класса должна быть совместима с заданной структурой.

Когда компилятор создаёт статически выделенный объект константной строки, поле c_string заполняется компилятором строкой; поле length заполняется компилятором длиной строки; указатель isa заполняется компилятором значением NULL, и позднее он будет автоматически исправлен во время выполнения библиотекой времени выполнения GNU Objective-C, чтобы указывать на класс, который был установлен опцией -fconstant-string-class при загрузке объектного файла (если вы хотите узнать, как это работает «за кулисами», имя используемого класса и список статических объектов для исправления хранятся компилятором в объектном файле в месте, где библиотека времени выполнения GNU найдёт их во время выполнения).

В результате, когда файл компилируется с опцией -fconstant-string-class, все объекты константных строк будут экземплярами класса, указанного в качестве аргумента этой опции. Возможны несколько единиц компиляции, которые ссылаются на разные классы константных строк; ни компилятор, ни компоновщик не накладывают никаких ограничений на это.

Следующая: compatibility_alias, Предыдущая: Уборка мусора, Наверх: Функции GNU Objective-C [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Constant-string-objects.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API