Просто наткнулся на ту же самую декларацию static NSString
. Я задавался вопросом, как именно эта статическая магия работает, поэтому я немного прочитал. Я только собираюсь обратиться к статической части вашего вопроса.
Согласно K&R каждая переменная в C имеет два основных признака: типа (например, с плавающей точкой) и хранения класса (автоматический режим, регистр, статический, EXTERN, ЬурейеЕ).
статический класс хранения имеет два различные эффекты в зависимости от того, является ли оно используется:
- внутри блока кода (например, внутри функции),
- вне всех блоков (на тот же уровень, что и функция).
Переменная внутри блока, который не имеет это класс хранения объявлен по умолчанию считается авто (т.е. он местный). Он будет удален, как только блок выйдет. Когда вы объявляете автоматическую переменную статичной, она сохраняет значение при выходе. Это значение все равно будет присутствовать, когда блок кода снова будет вызван.
Глобальные переменные (объявленные на том же уровне, что и функция) всегда являются статическими. Явное объявление глобальной переменной (или функции) должно быть static ограничивает область действия только одним файлом исходного кода. Он не будет доступен, и он не будет конфликтовать с другими исходными файлами. Это называется внутренняя связь.
Если вы хотите узнать больше, ознакомьтесь с internal and external linkage in C.
Почему я получил нижний предел здесь? – vodkhang
Это был не я, но я согласен - ваш ответ просто непонятен. См. Мой ответ, он разбивает вопрос о оригинальном постере на три разные темы (как обрабатываются «литералы» @ «литералы», что делает ключевое слово 'static', и как это отличается от' # define') и дает четкие ответы что, надеюсь, люди могут чему-то научиться. – harms
А, ок. Мне не хватало части статичности. Потому что, в первый раз, я знаю только об NSString alloc, init, поэтому я отвечаю только за эту часть. Я отредактирую свой ответ – vodkhang