要做一个全局,您会怎么写?大多数开发者都会首选#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查看具体细节:​​点击下载​