我想知道为什么在下面的代码中静态整数不会保持为0?是因为在objective-c类中也是对象,CoolClass类是否像单例一样被保留?
@interface CoolClasss : NSObject
+(void)staticMethod;
@end
@implementation CoolClass
static int integer=0;
+(void)staticMethod {
NSLog(@"integer: %d", integer);
integer++;
}
@end
int main (int argc, const char * argv[]) {
for (int i=0; i<10; i++) {
[CoolClass staticMethod];
}
return 0;
}
答案 0 :(得分:3)
与大多数OO语言一样,静态变量不属于单个对象。这意味着变量的单个副本由该类中的所有对象共享。它还意味着变量存在,无论该类是否存在任何对象。
这里发生的是你正在调用增加静态变量的静态方法。没有惊喜。
CoolClass
不是单身人士。单例被定义为一个永远不允许自己拥有多个对象的类。
在这里(在C ++中),你可以说静态成员就像一个单身一样,因为只有一个存在,但这不是单例类的真正定义,只是在对象之间共享的副作用。
答案 1 :(得分:0)
我醒了,意识到我应该检查维基百科。我太迟了。我不明白它是什么意思是静态的,这article有助于增加我对全局和本地静态意义的新认识。