wz3*_*366 3 static cocoa-touch objective-c ios
我在objective-c中做了一些关于静态变量的研究,我发现人们在不同的地方声明静态变量让我真的很困惑.
对于以下代码,我可以放在static NSUInteger counter;实现之外吗?(在我的#import"xxx.h"之后)
我可以把static NSUInteger counter;+ initialize类方法放进去吗?
我可以static NSUInteger counter;加入实例方法吗?
最重要的是,有什么区别以及如何选择在哪里声明它们?
谢谢!
@implementation MyClass
static NSUInteger counter;
+(void)initialize {
if (self == [MyClass class]) {
counter = 0;
}
}
@end
Run Code Online (Sandbox Code Playgroud)
您提供的版本中只有两个版本.在实现块内部或外部声明它们之间没有区别,因为静态变量不与类关联,而是与文件本身关联.出于同样的原因,在类方法或实例方法中声明它们之间也没有区别.
在方法内部声明它们之间的唯一区别是,如果它在方法内声明,则只能从同一方法中访问它.
最好在最具体的范围内声明一个变量,这样就不存在在某个意外导致错误的地方使用它的风险.如果您只需要访问方法中的静态变量,请在那里声明它.否则在文件中的任何其他位置声明它(在您需要的位置上方).你究竟放在哪里纯粹是一种风格的东西.我个人更喜欢它是在导入之后但在@implementation之前(如果我添加一个,则为类扩展).
static变量的属性控制变量的生命周期和名称的可见性.
静态变量与全局变量具有相同的生命周期 - 应用程序的整个执行时间.
静态变量的可见性取决于其声明的位置:
if语句的块中,那么它在该块之外是不可见的.| 归档时间: |
|
| 查看次数: |
2702 次 |
| 最近记录: |