关于ios:static关键字在类方法中的含义是什么

What does the static keyword mean in a class method

刚读过为什么苹果公司建议使用Dispatch_一次来实现ARC下的单例模式?我找到了苹果推荐的答案和方法,让单子看起来非常酷和整洁,但在进一步思考之后,我想知道,在objective-c中,类方法中的静态关键字究竟意味着什么?在Apple推荐这种模式之前,我只遇到过static作为类字段的修饰符。在类方法中使用静态时,行为如何改变?

1
2
3
4
5
6
7
8
9
10
11
 + (MyClass *)sharedInstance
    {
        //  Static local predicate must be initialized to 0
        static MyClass *sharedInstance = nil;
        static dispatch_once_t onceToken = 0;
        dispatch_once(&onceToken, ^{
            sharedInstance = [[MyClass alloc] init];
            // Do any other initialisation stuff here
        });
        return sharedInstance;
    }


在本例中,它是一个C语言结构*表示一个静态局部变量。静态局部变量在程序执行过程中保持其内存单元。在实践中,这意味着一旦变量被分配了一个值,它就会在随后的函数调用中保留该值。所以它就像一个缓存。

在Objective-C和NSDateFormatter实例中,您也会看到它使用了很多,因为这些实例的创建成本很高,所以您只希望执行一次,然后重用同一个实例。

  • 参见:http://en.wikipedia.org/wiki/static_u(关键字)

*记住,objective-c是c的超集。


每种语言似乎都以不同的方式使用"静态"。

Objective-C中的"static"与任何旧的C程序中的"static"完全相同。它是一个具有应用程序生存期的变量,其名称只能由封闭范围访问。无论是在Objective-C类方法、实例方法、旧的C函数中,还是在任何函数之外。


根据Apple文档,声明一个变量static将其范围限制为objective-c中的类。