应用程序范围的变量访问:像Java一样的静态?

时间:2011-05-06 20:02:00

标签: objective-c global-variables static-variables

我的视图控制器中有一个实例变量,我希望与整个程序共享。我不太清楚如何做到这一点。我可以将它声明为静态实例变量,然后通过ViewControllerClass.instancevariable等属性访问它吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

回复您对问题的评论:

如果在对象X中有一个实例变量,那么任何其他引用X的对象都可以通过常用方式访问该变量:

[objectX myClassAInstanceVariable];
// Or, if declared with @property
objectX.myClassAInstanceVariable;

如果另一个对象没有对X有引用,那么无法访问该变量,无论变量的状态或种类如何。在这种情况下,您可能需要重新考虑您的设计,或者查看下面关于应用代表的最后一段。


“静态”的概念在Objective-C中与您可能期望的不同(听起来您来自Java的经验)。

Objective-C实际上没有“类变量”的概念,尽管模拟这样的东西相当容易;这在mathk链接到Objective-C Static Class Level variables的问题中有所描述。您在类的头文件中声明了一个静态的变量,因此它在该文件之外是不可访问的,并为它创建访问器类方法。

任何具有对视图控制器的引用的对象都可以向其发送消息。请注意,在Objective-C中,成员变量默认为“受保护”,这意味着只有类或子类的实例(而非其他对象)才能访问这些变量。其他对象必须通过setter和getter方法。


正如另一种选择,因为你的问题的背景不清楚,如果你有某种“全局变量”并不真正特定于你的视图控制器,一个更好的地方可能是应用程序代表*。任何对象都可以随时获得对委托的引用:

[NSApp delegate];

NSApp是对NSApplication对象的全局引用,它是程序的核心。


*虽然肯定有可能过度。