【发布时间】:2011-10-31 19:51:09
【问题描述】:
我从一开始就构建了一个 iOS 应用程序,但其中有一个错误。由于源是从模板开始构建的,它的 appdelegate.h 看起来像:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
myViewController *viewController;
}
BOOL myBool; // intended to be globally accessible
NSString *myString; // intended to be globally accessible
@end
关于全局变量,我从许多其他 .m 源文件中引用了 myBool 和 *myString。
在 XCode 3.2.6 以下,我不记得在编译时遇到任何问题。
在 3.2.6 中,编译时出现警告,指向 appdelegate.h 中的这些“全局”变量,说:“无法在 @interface 或 @protocol 中声明变量”。由于编译或应用程序运行期间没有进一步的问题,很遗憾我没有考虑这些警告。
现在,使用 XCode 4.2,我无法编译此源代码,因为以前的警告变成了构建错误。它们引用并指向不同 .m 文件中引用“全局变量”的每一行。
考虑到我仍想将这些变量/引用作为全局变量/引用来访问,有没有一种简单的方法可以解决这个问题?
其他问题:虽然我正在评估迄今为止收到的答案(感谢大家),但另一个问题:知道为什么在 XCode v3.2.6 下没有给出警告,而在 3.2 中只有警告.6 如果这对我来说是一个真正的错误?为什么代码仍然被编译并且可以毫无问题地运行?
【问题讨论】:
-
请注意,这种意义上的“全局”变量在面向对象编程中通常是一个坏主意,因为它们违背了局部性和封装性。网上有很多关于这个主题的读物。