По-видимому, директива @""
встроена в компилятор target-c.
Например, если вы удалите все #import
s из исходного файла .m (& заголовок префикса), следующая строка будет синтаксической ошибкой:
NSString *string = @"ABCD"; // (Doesn't know anything about NSString class)
Однако, если вы измените тип Foundation NSString
на встроенный тип void
, он будет прекрасно скомпилирован:
void *string = @"ABCD";
Таким образом, даже без определения Foundation NSString
компилятор знает, как превратить @""
во что-то, что может стать экземпляром NSString
во время выполнения (вероятно, он не будет создан без Foundation, но компилятор похоже на ум); Поскольку он принимает синтаксис без каких-либо внешних определений библиотеки, компилятор видит @""
как часть языка.
Однако ваш код не сможет использовать какой-либо экземпляр @""
без импорта Foundation.h, поэтому с точки зрения вашей программы @""
является частью библиотеки.