objective-c - 接口(interface)实现中静态变量的含义是什么?

标签 objective-c variables static static-variables

在接口(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/

相关文章:

python - 递归累积或如何计算 Python 中的递归调用次数?

objective-c - 层支持的 NSControl 仍然调用 NSCell 绘图例程

JavaScript:按其他下拉列表的值过滤下拉列表

javascript - 从客户端 JavaScript 生成的站点生成静态 HTML

python - 添加要在 tkinter 中显示的变量

mysql - 使用现有数据更改变量类型mysql

php - PHP静态类变量可以用函数定义吗?

iphone - 做 git status, objective c, git 时总是得到 Crashlytics is modified

ios - 如何在初始图像上添加事件指示器

objective-c - Finder 从哪里获取文件夹中项目的 "date added"?