ios - 在 objective-c 中在哪里声明静态变量?

标签 ios objective-c cocoa-touch static

我对 objective-c 中的静态变量做了一些研究,我发现人们在不同的地方声明静态变量,这让我很困惑。

  1. 对于下面的代码,我可以将static NSUInteger counter;放在实现之外吗? (在我的#import "xxx.h"之后)

  2. 我可以将 static NSUInteger counter;放在 +initialize 类方法中吗?

  3. 我可以将 static NSUInteger counter; 放入实例方法中吗?

  4. 最重要的是,它们有什么区别以及如何选择在何处声明它们?

谢谢!

@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/

相关文章:

ios - 将 Xcode 文件移至新计算机并且不再工作

ios - 如何在 Xcode 中调试插件源代码?

ios - 如何从两个不同的数组中找到共同的对象并打印另一个对象?

cocoa - stringByAppendingPathComponent 中的基础错误?

ios - UITextView 不会将输入工具栏切换到自定义键盘

ios - 如何使用 swift 将 UI 对象连接到 Xcode 6 中的 cocoa 类的导出

ios - shouldAutorotateToInterfaceOrientation 没有被调用

iphone - 使用 native Trigger.IO API 将 UIImage 传递给 JS

ios - 奇怪的元类型初始化错误

objective-c - UITableViewController 滚动僵尸