为什么类中的静态整数会增加?

时间:2009-11-14 11:48:33

标签: objective-c

我想知道为什么在下面的代码中静态整数不会保持为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;
}

2 个答案:

答案 0 :(得分:3)

与大多数OO语言一样,静态变量不属于单个对象。这意味着变量的单个副本由该类中的所有对象共享。它还意味着变量存在,无论该类是否存在任何对象。

这里发生的是你正在调用增加静态变量的静态方法。没有惊喜。

CoolClass 不是单身人士。单例被定义为一个永远不允许自己拥有多个对象的类。

在这里(在C ++中),你可以说静态成员就像一个单身一样,因为只有一个存在,但这不是单例类的真正定义,只是在对象之间共享的副作用。

答案 1 :(得分:0)

我醒了,意识到我应该检查维基百科。我太迟了。我不明白它是什么意思是静态的,这article有助于增加我对全局和本地静态意义的新认识。