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

时间:2014-10-21 15:19:39

标签: ios objective-c

刚刚阅读Why does Apple recommend to use dispatch_once for implementing the singleton pattern under ARC?,我发现答案和方法Apple推荐单身人士非常酷,看起来很整洁,但经过进一步思考后,我想知道,类中的静态关键字是什么方法的意思恰好在objective-c?在Apple推荐的这种模式之前,我只遇到过static作为类字段的修饰符。在类方法中使用静态时,行为如何变化?

 + (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;
    }

3 个答案:

答案 0 :(得分:4)

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

Objective-C中的

“static”与任何旧C程序中的“static”完全相同。它是应用程序生命周期的变量,只有封闭范围才能访问该名称。这是在Objective-C类方法,实例方法,旧C函数内部,还是在任何函数之外。

答案 1 :(得分:4)

在这种情况下,它是一个C语言构造*,意思是一个静态局部变量。静态局部变量在整个程序执行过程中保留其内存单元。实际上,这意味着一旦为变量赋值,它就会在后续函数调用期间保留该值。所以它就像一个缓存。

你也看到它在Objective-C中与NSDateFormatter个实例一起使用了很多,因为这些实例的创建成本很高,所以你只想做一次,然后重用同一个实例。

*请记住,Objective-C是C的超集。

答案 2 :(得分:-1)

根据Apple文档,声明变量static将其范围限制为objective-C

中的类