Являются ли статические переменные в методах Objective C общими для всех экземпляров? - PullRequest
43 голосов
/ 08 июля 2010

Я хочу уточнить, имеют ли разные экземпляры класса Objective C общие статические переменные, которые встречаются внутри методов, или каждый экземпляр получает свою собственную копию:

- (void) myMethod {
    static int myVar = 0;
}

Ответы [ 2 ]

82 голосов
/ 10 апреля 2013

Статические локальные объекты распределяются между вызовами методов и экземплярами. Вы можете думать о них как о глобалах, которые видны только внутри их методов:

- (void) showVars {
    int i = 0;
    static int j = 0;
    i++; j++;
    NSLog(@"i = %i ; j = %i", i, j);
}

[...]

[obj1 showVars];
[obj2 showVars];
[obj1 showVars];
[obj2 showVars];

Над вызовами на 2 разных экземплярах будет выводиться:

i = 1 ; j = 1
i = 1 ; j = 2
i = 1 ; j = 3
i = 1 ; j = 4
30 голосов
/ 08 июля 2010

Это то же самое, что статическая переменная в C; экземпляры будут совместно использовать переменную. Если вы хотите, чтобы каждый экземпляр имел свою собственную копию, вам нужна переменная экземпляра (объявленная в блоке @interface).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...