静态变量在接口实现中的意义是什么?

在接口的实现中定义静态变量时,我不太理解。在方法中,我确实理解它们与局部变量的区别,但不理解在实现中直接定义时的区别。

看看这些例子,实际上这两者有什么区别呢?

#include "MyClass.h"


@implementation MyClass
int myInt;
...
@end

还有:

#include "MyClass.h"


@implementation MyClass
static int myInt;
...
@end

在这两种情况下,myInt对于所有方法都是可见的,如果我正确地解释了运行的测试,那么对于类的不同实例,myInt在这两种情况下都是相同的变量。

99452 次浏览

该上下文中的“ static”关键字与普通 C 中的关键字相同: 它将 myInt 的范围限制为当前文件。

来自苹果的“ The Objective-C Programming Language”: “声明一个变量 静电干扰将其作用域限制为类——以及在文件中实现的类的一部分。(因此,与实例变量不同,静态变量不能被子类继承,也不能被子类直接操纵)

不幸的是,它有不同的效果取决于您使用它的地方。

静态功能:
默认情况下,所有函数都具有全局作用域。静态说明符允许您将函数的作用域限制为当前文件。

静态局部变量:
当您对局部变量使用静态修饰符时,函数会跨调用“记住”它的值。例如,下面代码片段中的 currentCount 变量永远不会被重置,因此我们可以让 count ByTwo ()为我们做记录,而不是将 count 存储在 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 关键字的这种使用不会影响局部变量的作用域。
了解更多关于 静态关键字的信息。

”在 C 和 Objective-C 中,静态变量是为程序的整个生命周期分配的变量。这与自动变量(其生存期存在于单个函数调用期间)和动态分配的变量(如对象)形成对比,后者在不再使用时可以从内存中释放。更简单地说,在所有的函数/方法调用中维护静态变量的值。当在函数之外声明时,静态变量对于声明它的文件中的所有内容都是可见的; 当在函数或方法中声明时,静态变量只在该函数或方法中可见,但在调用之间保留该值。”

点击这里查看完整的解释:

Https://stackoverflow.com/a/4965145/951349