2010-07-07 190 views
37

我想澄清是否发生的内部方法,或者如果每个实例都有它自己的拷贝静态变量的Objective-C类份额不同的实例:静态变量

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

回答

30

这是相同的作为C中的静态变量;实例将共享该变量。如果您希望每个实例都有自己的副本,则需要一个实例变量(在@interface块中声明)。

+3

你不能说“跟C一样”。 “主观”C在客观意义上没有实例。 – iter 2010-07-07 21:59:20

+6

@iter,它与C中的任何静态变量相同,都是我的意思。如果它是一个静态的全局变量,那么每个编译单元只有一个,如果它是一个静态局部变量,则每个函数(或Objective-C中的方法)都会引用它。 – 2010-07-07 22:12:16

78

静态本地是在方法调用和实例之间共享的。 你可以把它们作为全局只内他们的方法是可见的:

- (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 
+0

针对特定于实例的静态局部变量的任何解决方案? – fatuhoku 2015-03-03 12:21:17

+1

@fatuhoku这甚至意味着什么?如果它们是特定于实例的,它们如何是静态的? – lensovet 2015-09-28 12:20:47