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

我知道你可以通过使用“extern”在Objective-C中定义一个全局变量,但我只是意识到,在我的第一个方法之前,我已经在.m文件顶部声明的变量也是意外的全局性的(这导致了一些问题).我把它们移动到我的头文件的@interface部分,我认为它正确地声明它们只存在于类中,这解决了我的一些问题,但我仍然有点困惑.

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

解决方法

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

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

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...