Objective-C方法中的静态变量是否跨实例共享?

ite*_*ter 43 objective-c

我想澄清一下Objective-C类的不同实例是否共享在方法内发生的静态变量,或者每个实例是否都有自己的副本:

- (void) myMethod {
    static int myVar = 0;
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 84

静态本地在方法调用AND实例之间共享.您可以将它们视为仅在其方法中可见的全局变量:

- (void) showVars {
    int i = 0;
    static int j = 0;
    i++; j++;
    NSLog(@"i = %i ; j = %i", i, j);
}
Run Code Online (Sandbox Code Playgroud)

[...]

[obj1 showVars];
[obj2 showVars];
[obj1 showVars];
[obj2 showVars];
Run Code Online (Sandbox Code Playgroud)

以上调用将输出2个不同的实例:

i = 1 ; j = 1
i = 1 ; j = 2
i = 1 ; j = 3
i = 1 ; j = 4
Run Code Online (Sandbox Code Playgroud)


Car*_*rum 30

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

  • @iter,它与C中的任何静态变量相同,就是我的意思.如果它是静态全局,则每个编译单元只有一个,如果它是静态本地,则每个函数(或Objective-C中的方法)都有一个引用它. (8认同)
  • 你不能说"和C一样"."主观"C在客观意义上没有实例. (3认同)