在objective-c中声明一个静态variables的地方?

我在Objective-C中做了一些关于静态variables的研究,我发现人们在不同的地方声明了静态variables,这让我感到非常困惑。

  1. 对于下面的代码,我可以把static NSUInteger counter; 执行之外? (在我的#import“xxx.h”之后)

  2. 我可以把static NSUInteger counter; 里面的初始化类的方法?

  3. 我可以把static NSUInteger counter; 成一个实例方法?

  4. 最重要的是,有什么区别,以及如何select申报?

谢谢!

 @implementation MyClass static NSUInteger counter; +(void)initialize { if (self == [MyClass class]) { counter = 0; } } @end 

你提供的只有两个版本。 在实现块内部或外部声明它们没有区别,因为静态variables不与类关联,而是与文件本身关联。 出于同样的原因,在类方法或实例方法中声明它们也没有区别。

在方法中声明它们的唯一区别在于,如果它是在一个方法中声明的,它只能在同一个方法中访问。

在最具体的范围内声明一个variables总是最好的,这样你就不会在无意中造成错误的地方使用它。 如果你只需要访问方法中的静态variables,就在那里声明它。 否则,在文件的其他任何地方(在你需要的地方上面)声明它。 在那里,你所说的纯粹是一种风格的东西。 我个人更喜欢它是在import之后,但在@implementation(和类扩展,如果我加一个)之前。

variables的static属性控制variables的生命周期和名称的可见性

一个静态variables与全局variables具有相同的生命周期 – 应用程序的整个执行时间。

静态variables的可见性取决于其声明的位置:

  • 如果声明在一个文件中,但是在任何函数或方法声明之外,那么它的名字在整个单个文件中是可见的。
  • 如果声明在任何块中,则variables名称在整个块中的声明点是可见的,包括任何封闭的块,除非在这样封闭的块中被声明隐藏。 也就是说,如果声明直接发生在方法/函数的主体中,则只能在该方法/函数中可见; 如果它发生在if语句的块内,那么在该块之外是不可见的。

你可以把它放在所有这些地方。 如果variables在方法/函数中,那么它将在调用之间保持它的值。 如果它位于文件的顶部,这意味着它只能被该文件中的代码访问。

在一个文件中(但从来不在另一个文件中)由多个函数/方法访问的全局variables通常被声明为静态的,以防止与其他文件中具有相同名称的variables冲突。 如果一个variables需要通过一个方法来访问,并且需要在调用之间保持它的值,那么可以使variablesstatic,并在方法内声明它,以使代码更加紧凑。