Spec-Zone.ru › GCC 4

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. Нет никаких требований к методам, которые должен реализовать класс постоянных строк, но окончательная структура переменных класса должна быть совместима с заданной структурой.

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

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

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

Spec-Zone.ru

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