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和
- 参见:http://en.wikipedia.org/wiki/static_u(关键字)
*记住,objective-c是c的超集。
每种语言似乎都以不同的方式使用"静态"。
Objective-C中的"static"与任何旧的C程序中的"static"完全相同。它是一个具有应用程序生存期的变量,其名称只能由封闭范围访问。无论是在Objective-C类方法、实例方法、旧的C函数中,还是在任何函数之外。
根据Apple文档,声明一个变量static将其范围限制为objective-c中的类。