iOS中的extern与static

1.extern

#import <Foundation/Foundation.h>

extern NSString *DBDefaultName;

@interface DataBase : NSObject

@end



#import "DataBase.h"

NSString *DBDefaultName = @"default.sqlite";

@implementation DataBase

@end
extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或者函数时时,在其他模块中寻找其定义。另外,extern也可用来进行链接指定

2.static 

#import "DataBase.h"
#import "FMDatabase.h"

@interface DataBase ()

@end

@implementation DataBase

static FMDatabase *database;

@end

3.区别:

  (1)extern修饰的全局变量默认是有外部链接的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过external全局变量的声明,就可以使用全局变量。

  (2)static修饰的全局静态变量,作用域是声明此变量所在的文件。

原文地址:https://www.cnblogs.com/chanjinger/p/6006997.html