Jac*_*son 10 variables global global-variables objective-c extern
我知道你可以通过使用"外部"定义在Objective-C的全局变量,但我意识到,我已经在我的.m文件的顶部我的第一个方法之前声明的变量也是偶然全球(这是造成一些问题).我将它们移动到我的头文件的@interface部分,我认为它正确地声明它们只存在于类中,这解决了我的一些问题,但我仍然有点困惑.
将变量声明为extern并将其放在.m文件的顶部有什么区别?或者那些导致同样的事情?
Mat*_*ing 25
extern是一种明确说明,为了可读性和编译时强制执行,你只是在这里声明这个变量,并且实际上期望它在别处定义.如果您还尝试定义外部变量,编译器将告诉您错误的方式.这对于全局变量有用,可以防止名称冲突和多个定义,这两个定义都会导致链接器错误.但是,extern关键字本身并不会使变量成为全局变量.
使变量成为全局的是它在文件中声明的位置.如果要在类的头文件中声明@interface之外的变量,那么您将声明一个变量,该变量在您的类的所有实例以及#imports标头的任何人之间共享和可见.如果您(并且显然已经)在类的.m文件中声明了@implementation之外的变量,那么您也可以声明一个在您的类的所有实例之间共享的变量,但对任何人都不可见. #imports你头.
因此,使用变量声明的位置来确定范围.您只能在一个地方定义这些全局变量.对于您声明它们的所有其他位置,在声明前加上extern以使代码可读,您的意图清晰,并确保您不再尝试再次定义它.
| 归档时间: |
|
| 查看次数: |
6315 次 |
| 最近记录: |