iOS extern关键字

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,定义在哪个地方都可以

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容