Каково значение статических переменных в реализации интерфейса?

StackOverflow https://stackoverflow.com/questions/1087061

Вопрос

Я не совсем понимаю статические переменные, когда они определены в реализации интерфейса.В методах я понимаю, чем они отличаются от локальных переменных, но не тогда, когда определены непосредственно в реализации.

Посмотрите на эти примеры.Какая разница между этими двумя практически?

#include "MyClass.h"

@implementation MyClass
int myInt;
...
@end

И:

#include "MyClass.h"

@implementation MyClass
static int myInt;
...
@end

myInt в обоих случаях виден всем методам, и если я правильно интерпретировал тест, который я выполнил, myInt будет в обоих случаях одной и той же переменной для разных экземпляров класса.

Это было полезно?

Решение

Ключевое слово 'static' в этом контексте такое же, как и в обычном C:это ограничивает область действия myInt текущим файлом.

Другие советы

К сожалению, он имеет разные эффекты в зависимости от того, где вы его используете.

Статические функции:
По умолчанию все функции имеют глобальную область видимости.Статический спецификатор позволяет вам ограничить область действия функции текущим файлом.

Статические Локальные переменные:
Когда вы используете статический модификатор для локальной переменной, функция “запоминает” ее значение при вызовах.Например, переменная CurrentCount в следующем фрагменте никогда не сбрасывается, поэтому вместо сохранения count в переменной внутри 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 не влияет на область действия локальных переменных.
Узнайте больше о статическое ключевое слово.

"Как в C, так и в Objective-C статическая переменная - это переменная, которая выделяется на весь срок службы программы.Это в отличие от автоматических переменных, время жизни которых существует во время одного вызова функции;и динамически распределяемые переменные, такие как объекты, которые могут быть освобождены из памяти, когда они больше не используются.Проще говоря, значение статической переменной сохраняется на протяжении всех вызовов функций / методов.Когда статическая переменная объявлена вне функции, она видна всему, что находится внутри файла, в котором она объявлена;когда оно объявлено внутри функции или метода, оно видно только внутри этой функции или метода, но значение сохраняется между вызовами ".

Ознакомьтесь с полным объяснением здесь:

https://stackoverflow.com/a/4965145/951349

Из книги Apple "Язык программирования Objective-C":"Объявление переменной статический ограничивает область его действия только классом - и только той частью класса, которая реализована в файле.(Таким образом, в отличие от переменных экземпляра, статические переменные не могут наследоваться подклассами или напрямую управляться ими)."

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top