Ответ 1
Это то же самое, что и статическая переменная в C; экземпляры будут разделять переменную. Если вы хотите, чтобы каждый экземпляр имел свою собственную копию, вам нужна переменная экземпляра (объявленная в блоке @interface
).
Я хочу уточнить, используют ли разные экземпляры класса Objective-C статические переменные, которые происходят внутри методов, или каждый экземпляр получает свою собственную копию:
- (void) myMethod {
static int myVar = 0;
}
Это то же самое, что и статическая переменная в C; экземпляры будут разделять переменную. Если вы хотите, чтобы каждый экземпляр имел свою собственную копию, вам нужна переменная экземпляра (объявленная в блоке @interface
).
Статические локали разделяются между вызовами методов и экземплярами. Вы можете думать о них как о глобалях, которые видны только внутри их методов:
- (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