Objective-C中的全局变量 – .m文件声明的extern和top之间的差异

前端之家收集整理的这篇文章主要介绍了Objective-C中的全局变量 – .m文件声明的extern和top之间的差异前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道你可以通过使用“extern”在Objective-C中定义一个全局变量,但我只是意识到,在我的第一个方法之前,我已经在.m文件顶部声明的变量也是意外的全局性的(这导致了一些问题).我把它们移动到我的头文件的@interface部分,我认为它正确地声明它们只存在于类中,这解决了我的一些问题,但我仍然有点困惑.

将变量声明为extern并将其放在.m文件的顶部有什么区别?还是做同样的事情?

解决方法

extern是一种明确说明,为了可读性和编译时执行,您只是在这里声明这个变量,并且实际上期望它在其他地方被定义.如果你也试图定义extern变量,编译器会告诉你你的方式的错误.这对全局变量有用,可以防止名称冲突和多个定义,这两个定义会导致链接错误.然而,extern关键字本身并不会使变量为全局.

使变量global成为其声明在文件中的位置.如果要在类’头文件中的@interface之外声明一个变量,那么您将声明一个变量,该变量在类的所有实例以及#imports头的所有实例之间共享并可见.如果你(并且显然已经)在你的类’.m文件中声明了@implementation之外的一个变量,那么你也可以声明一个在你的类的所有实例之间共享的变量,但是对于任何人#import您的标题.

所以,使用变量声明的位置来确定范围.您只能在一个地方定义这些全局变量.对于您声明的所有其他地方,使用extern前缀声明以使代码可读,您的意图清晰,并确保不再尝试再次定义.

猜你在找的C&C++相关文章