Spec-Zone.ru › GCC 15

9.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=class-name. Предоставляемый класс должен соответствовать строгой структуре, такой же, как структура класса NXConstantString:

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

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

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

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

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

Spec-Zone.ru

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