我在一个接口的实现定义的时候不太明白静态变量。 在方法我不明白他们从局部变量之间的区别,但不直接参与执行规定时。
看看这些例子。 就这两个有什么区别实际?
#include "MyClass.h"
@implementation MyClass
int myInt;
...
@end
和:
#include "MyClass.h"
@implementation MyClass
static int myInt;
...
@end
myInt
是对所有方法可见这两种情况下,如果我解释的测试我正确运行, myInt
会在两种情况下是类的不同实例相同的变量。
在这方面,“静态”的关键字是相同的,因为这将是纯C:它限制敏的范围,以当前文件。
不幸的是,它取决于你使用它有不同的效果。
静态函数:
默认情况下,所有的功能具有全局范围。 静态符可以限制函数的范围到当前文件。
静态局部变量:
当您使用static修饰符的局部变量,函数“记住”它的整个调用价值。 例如,在下面的代码片段的CURRENTCOUNT变量从来没有得到这样的复位,而不是一个变量存储的主要()内的数,我们可以让countByTwo()为我们做了记录。
// 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关键字不会影响局部变量的范围。
了解更多关于static关键字 。
“。在C和Objective-C中的静态变量是分配给一个程序的整个生命周期的变量这是相对于自动变量,其寿命一个函数调用期间的存在;和动态分配的变量状物体,这可以从当不再使用的内存被释放。更简单地说,一个静态变量的值保持在所有函数/方法调用。当一个函数的外部声明,静态变量是可见的,其中是文件内的一切声明;函数或方法内声明时,它仅在该功能或方法是可见的,但该值被保持呼叫之间“。
点击这里,查看完整的解释:
https://stackoverflow.com/a/4965145/951349
从苹果公司的“的Objective-C编程语言”:“声明一个变量静态限制了它的范围,只是类-并且这就是文件中实现的只是类的一部分(因此不同于实例变量,静态变量不能被继承。通过,或直接由,小类操作)。”
文章来源: What's the meaning of static variables in an implementation of an interface?