3

我的视图控制器中有一个实例变量,我想与整个程序共享。我不太确定该怎么做。我可以将它声明为静态实例变量,然后通过属性访问它ViewControllerClass.instancevariable吗?

谢谢!

4

1 回答 1

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];

NSAppNSApplication是对程序核心对象的全局引用。


*尽管这当然有可能做得过火。

于 2011-05-06T21:21:36.190 回答