要做一个全局,您会怎么写?大多数开发者都会首选#define来定义一个全局参数,如数字,字符串,可是当你了解足够深,你会发现#define定义的参数是没有类型的,但是在使用的时候你发现+-*/是没有问题的,因为#define宏在预处理时只是实现了替换了,具体的运算是在编辑时才完成的。
这里推荐一种写法:const(不可变量)
static const int count = 10;
这样写的好处就是可以直接决定定义的值的具体类型。减少了拷贝次数,这里说明下,#define定义的宏是立即数,const是给定一个地址,所以在运行中,const存在于全局的静态区,只有一个地址,#define使用时会造成多次拷贝,所以在没有了存储和读内存的情况下效率也相对的变高了。
最后来说一下extern的用法,作用是饮用在另一个地方已经存在的全局变量;
比如在A类中有一个全局变量(注意全局变量,在@implementation和@interface之外),有一个值,但是在别的类中我想使用这个值,要么存本地,要么存数据库来访问,但是extern可以帮你直接访问到这个全局变量。
#import "A.m" @interface SecViewController () @end NSString *myName; @implementation SecViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. myName = @"CodeLiu"; } #import "B.m" @interface SecViewController () @end extern NSString *myName; @implementation SecViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. NSLog(@"%@",myName); 也可以加const修饰,但是请注意const的用法和意义。 注:此方法对于字典和数组同样适用。
可下载Demo查看具体细节:点击下载