Просто наткнулся на ту же самую декларацию static NSString
. Я задавался вопросом, как именно работает эта статическая магия, поэтому я немного прочитал. Я рассмотрю только статическую часть вашего вопроса.
Согласно K & R каждая переменная в C имеет два основных атрибута: type (например, float) и класс хранения (auto, register, static, extern, ЬурейеЕ).
Класс хранения static имеет два различных эффекта в зависимости от того, используется ли он:
- внутри блока кода (например, внутри функции),
- вне всех блоков (на том же уровне, что и функция).
Переменная внутри блока , для которого не объявлен класс хранения, по умолчанию считается автоматической (то есть локальной). Он будет удален, как только блок выйдет. Когда вы объявляете автоматическую переменную статической, она сохраняет свое значение при выходе. Это значение останется там, когда блок кода снова будет вызван.
Глобальные переменные (объявленные на том же уровне, что и функция) всегда являются статическими. Явное объявление глобальной переменной (или функции) static ограничивает ее область действия только одним файлом исходного кода. Он не будет доступен и не будет конфликтовать с другими исходными файлами. Это называется внутренняя связь .
Если вы хотите узнать больше, прочитайте внутреннюю и внешнюю связь в C .