我对 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
最佳答案
您提供的版本实际上只有两个版本。在实现 block 内部或外部声明它们没有区别,因为静态变量不与类相关联,而是与文件本身相关联。出于同样的原因,在类方法或实例方法中声明它们之间也没有区别。
在方法内部声明它们与不在方法内部声明它们之间的唯一区别是,如果它在方法内部声明,则只能从同一方法内部访问它。
最好在最具体的范围内声明一个变量,这样就没有在无意中使用它导致错误的风险。如果您只需要访问方法内的静态变量,请在那里声明它。否则在文件中的其他任何地方声明它(在您需要它的上方)。你把它放在哪里纯粹是一种风格。我个人更喜欢它在导入之后但在@implementation 之前(如果我添加一个类扩展)。
关于ios - 在 objective-c 中在哪里声明静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850548/