dre*_*lax 28
传统上,全局变量在标头中声明,并在源文件中定义.其他源文件只需要知道如何声明它使用它(即它的类型和名称).只要变量在源文件中的某处定义,链接器就能够找到它并将其他源文件中的所有引用适当地链接到定义.
在标题的某处,您将声明一个如下全局变量:
extern int GlobalInt;
Run Code Online (Sandbox Code Playgroud)
该extern部分告诉编译器这只是一个声明,由一个int标识的类型的对象GlobalInt存在.它可以在以后定义,也可以不定义(编译器不负责确保它存在,这是链接器的工作).在这方面,它类似于功能原型.
在您的一个源文件中,您定义GlobalInt整数:
int GlobalInt = 4;
Run Code Online (Sandbox Code Playgroud)
现在,包含标题的每个文件都可以访问GlobalInt,因为标题表明它存在,所以编译器很高兴,链接器会在你的一个源文件中看到它,所以它也会很高兴.只是不要定义两次!
您应该考虑这种方法是否有用.全局变量由于多种原因而变得混乱(试图找出确切定义或声明的位置,线程问题),通常不需要全局变量.您应该考虑使用单例方法.
Jon*_*pan 15
别.全局变量通常是设计不佳的标志.Objective-C中的常见替换是返回对象(可能是也可能不是单例)的类方法,例如[NSUserDefaults standardUserDefaults]或[UIDevice currentDevice].
但是,如果必须使用全局变量,请继续阅读.
在你的标题中:
extern NSString *someString;
extern NSInteger someInteger;
Run Code Online (Sandbox Code Playgroud)
在您的实现文件中:
NSString *someString = @"DEFAULT_VALUE";
NSInteger someInteger = DEFAULT_VALUE;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29422 次 |
| 最近记录: |