extern:
#import <UIKit/UIKit.h>
extern NSString *sMicro;//声明变量sMicro
@interface ViewController :UIViewController
@end
声明了变量之后,使用变量有两种方式:
#import "UIViewController.h"//引用包含声明的头文件
extern NSString *sMicro;//在要使用的地方重新声明一遍,如果之前有对该变量进行定义,那么此时他的值就是之前定义的值。
const:
#import <UIKit/UIKit.h>
const NSString *sMicro = @"Smicro";//全局常量,外部都可以访问
@interface ViewController :UIViewController
@end
question:
const NSString *sMicro;用const修饰了,这个合法,使用起来就是全局变量NSString *sMicro?后面给出答案
static const NSString *sMicro = @"Smicro";//使用static修饰,局部常量(文件内)
const NSString *sMicro =@"Smicro";//"*sMicro"不能修改,"sMicro"能修改
NSString const *sMicro1 =@"Smicro"; //"*sMicro"不能修改,"sMicro"能修改
NSString *const sMicro2 =@"Smicro";//"*sMicro"能修改,"sMicro"不能修改
前面那个问题就是变量sMicro的地址是不可变的,但是值是可变的。
归纳:
const右边不能被更改。
我们写代码的时候,一般会把定义的全局常量写在独立的文件里。
NSString *const sMicro2 =@"Smicro";//"*sMicro"能修改,"sMicro"不能修改
define:
#define Smicro @"Smicro"
使用需要引用定义它的头文件。
另外define可以带参数,这样用起来很方便,但是个人不太推荐。下面实现平方:
#define Smicro(x) ((x)*(x))
总结:
一般推荐使用extern const的组合来代替define。
extern有声明就有定义,define需要头文件,static出现只管它后面的范围,const只管它右边的不能改变。
感谢:参照博客