Подтвердить что ты не робот

Являются ли статические переменные в методах Objective C общими для всех экземпляров?

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

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

Ответ 1

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

Ответ 2

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

- (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];

Вызов из двух разных экземпляров выведет:

i = 1 ; j = 1
i = 1 ; j = 2
i = 1 ; j = 3
i = 1 ; j = 4