我在接口的实现定义的时候不太明白静态变量。在方法我不明白他们从局部变量之间的区别,但不直接参与执行规定时。

看这些实施例。就这两个有什么差别几乎?

#include "MyClass.h"

@implementation MyClass
int myInt;
...
@end

#include "MyClass.h"

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

myInt是在对所有的方法可见这两种情况下,如果我解释的测试I正确运行,将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关键字

“以C和Objective-C中的静态变量是分配给一个程序的整个生命周期的变量这是相对于自动变量,其寿命一个函数调用期间的存在;和动态分配的状物体,这可以从内存中释放时不再变量。更简单地说,一个静态变量的值保持在所有函数/方法调用。当一个函数的外部声明,静态变量是可见的一切都在文件中声明它;一个函数或方法内声明时,它是可见的唯一内的函数或方法,但该值被保持呼叫之间“

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

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

这是苹果的“The Objective-C编程语言”:“声明一个变量的静态的限制了它的范围,只是类 - 并且这就是文件中实现的只是类的一部分(。因此不像实例变量,静态变量不能被继承,或直接通过,小类操作)“。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top