在接口(interface)的实现中定义静态变量时,我不太了解。在方法中,我确实了解它们与局部变量的区别,但不是直接在实现中定义时。
看看这些例子。这两者实际上有什么区别?
#include "MyClass.h"
@implementation MyClass
int myInt;
...
@end
还有:
#include "MyClass.h"
@implementation MyClass
static int myInt;
...
@end
myInt
在这两种情况下对所有方法都是可见的,如果我解释了一个我正确运行的测试,myInt
在这两种情况下对于不同的实例都是相同的变量类的。
最佳答案
不幸的是,它会根据你使用它的位置而产生不同的效果。
静态函数:
默认情况下,所有函数都有一个全局范围。 static 说明符可让您将函数的范围限制为当前文件。
静态局部变量:
当您在局部变量上使用 static 修饰符时,函数会在调用期间“记住”它的值。例如,以下代码段中的 currentCount 变量永远不会被重置,因此我们可以让 countByTwo() 为我们进行记录,而不是将计数存储在 main() 内部的变量中。
// main.m
#import <Foundation/Foundation.h>
int countByTwo() {
static int currentCount = 0;
currentCount += 2;
return currentCount;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"%d", countByTwo()); // 2
NSLog(@"%d", countByTwo()); // 4
NSLog(@"%d", countByTwo()); // 6
}
return 0;
}
静态关键字的这种使用不会影响局部变量的作用域。
阅读有关 static keyword 的更多信息.
关于objective-c - 接口(interface)实现中静态变量的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087061/