加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:41:34 所属栏目:百科 来源:网络整理
导读:我知道你可以通过使用“extern”在Objective-C中定义一个全局变量,但我只是意识到,在我的第一个方法之前,我已经在.m文件顶部声明的变量也是意外的全局性的(这导致了一些问题).我把它们移动到我的头文件的@interface部分,我认为它正确地声明它们只存在于类中,
我知道你可以通过使用“extern”在Objective-C中定义一个全局变量,但我只是意识到,在我的第一个方法之前,我已经在.m文件顶部声明的变量也是意外的全局性的(这导致了一些问题).我把它们移动到我的头文件的@interface部分,我认为它正确地声明它们只存在于类中,这解决了我的一些问题,但我仍然有点困惑.

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读