extern关键字
原来经常看到extern关键字,但是一直搞不懂具体的用法,以及跟static的区别。今天就要搞懂它~~~
1.首先随便先一个类Foo,并在头文件里添加extern NSString * const fooExtern;
Foo.h
#import <Foundation/Foundation.h>
extern NSString * const fooExtern;
@interface Foo : NSObject
@end
- 这里
不能定义
,否则会报错(static
关键字是可以的,如:static NSString * const str = @"ahaha";
)- 如果我只声明不定义,然后在外部使用
fooExtern
会怎样?编译会报错~
。说明这里的extern只是声明,必须在别的地方定义
2.然后Foo.m里定义,写在哪呢?
- 刚开始我并不知道怎么用,写在了某个方法里,如下:
#import "Foo.h"
@implementation Foo
- (instancetype)init {
if (self = [super init]) {
NSString * const fooExtern = @"haha";
}
return self;
}
@end
结果:外部调用时会报错的
- 正确的写法,如下:
#import "Foo.h"
NSString *const fooExtern = @"hhaa";
@implementation Foo
@end
- 外部调用的写法:如下:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"extern: %@", fooExtern);
}
fooExtern的定义写在viewControler里也是可以,因为extern NSString * const fooExtern;只是声明有一个fooExtern,定义在哪个地方都可以