刚刚阅读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;
}
答案 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
中的类