Spec-Zone.ru › GCC 5

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, Предыдущее: Уборка мусора, Вернуться к: Objective-C [Оглавление][Индекс]

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

Spec-Zone.ru

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