В чем смысл статических переменных в реализации интерфейса?
Я не совсем понимаю статические переменные, когда они определены в реализации интерфейса. В методах я понимаю, как они отличаются от локальных переменных, но не тогда, когда они определены непосредственно в реализации.
посмотрите на эти примеры. Какая разница между этими двумя практически?
#include "MyClass.h"
@implementation MyClass
int myInt;
...
@end
и:
#include "MyClass.h"
@implementation MyClass
static int myInt;
...
@end
myInt
в обоих случаях виден для всех методов, и если я правильно интерпретировал тест, который я выполнил,myInt
будет в обоих случаях быть одной и той же переменной для разных экземпляров класса.
4 ответа:
ключевое слово "static" в этом контексте такое же, как и в обычном C: оно ограничивает область действия myInt текущим файлом.
к сожалению, он имеет различные эффекты в зависимости от того, где вы используете его.
Статические Функции:
По умолчанию все функции имеют глобальную область действия. Статический спецификатор позволяет ограничить область действия функции текущим файлом.Статические Локальные Переменные:
Когда вы используете статический модификатор для локальной переменной, функция "запоминает"его значение при вызовах. Например, переменная currentCount в следующем сниппет никогда не сбрасывается, поэтому вместо того, чтобы хранить счетчик в переменной внутри main (), мы можем позволить countByTwo() делать запись за нас.// main.m #import <Foundation/Foundation.h> int countByTwo() { static int currentCount = 0; currentCount += 2; return currentCount; } int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"%d", countByTwo()); // 2 NSLog(@"%d", countByTwo()); // 4 NSLog(@"%d", countByTwo()); // 6 } return 0; }
использование ключевого слова static не влияет на область видимости локальных переменных.
Узнайте больше о static ключевое слово.
" как в C, так и в Objective-C статическая переменная-это переменная, которая выделяется на весь срок службы программы. Это в отличие от автоматических переменных, чье время жизни существует во время одного вызова функции; и динамически выделяемых переменных, таких как объекты, которые могут быть освобождены из памяти, когда они больше не используются. Проще говоря, значение статической переменной сохраняется во всех вызовах функций/методов. При объявлении вне функции статическая переменная видна все в файле, в котором он объявлен; при объявлении внутри функции или метода он виден только внутри этой функции или метода, но значение сохраняется между вызовами."
посмотреть полное объяснение здесь:
от Apple "язык программирования Objective-C": "объявление переменной static ограничивает его область только классом -- и только частью класса, который реализован в файле. (Таким образом, в отличие от переменных экземпляра, статические переменные не могут наследоваться подклассами или непосредственно управляться ими)."