iOS const,static,extern

const:常量,当有字符串常量的时候,推荐使用
const与宏的区别:
1 .编译时刻:宏:预编译 const:编译时刻
2.编译检查:宏:不会检查错误 const:会检查错误

NSString* const Key = @"KEN";
#define KENUserDeafults [NSUserDefaults standardUserDefaults]

3.宏的好处:定义代码
4.宏的坏处:编译时间过长,因此常用的字符串通常使用const修饰

const作用:

  1. 仅仅是用来修饰右边的变量(只能修饰变量:基本变量,指针变量,对象变量)
    修饰基本变量
    int const a = 5; //a:只读变量
    const int a = 5; //a:只读变量
    int a = 10;
    int * const p = &a;//p:只读变量  *p:变量
    const int *p = &a;//*p:只读变量  p:变量
    int const *p = &a;//*p:只读变量  p:变量
    int const * const p = &a;//*p:只读变量  p:只读变量
    const int  * const p = &a;//*p:只读变量  p:只读变量

2.const修饰的变量,表示只读
const使用场景:
1.定义一个全局的只读的变量
2.在方法中定义只读参数

static作用
1.修饰局部变量
延长局部变量的是生命周期,只要成员运行,局部变量会一直存在
局部变量只会分配一次内存(static:修饰的变量,程序一运行就会分配一次内存)

   for (int i=0; i<5; i++) {
       
//        static int a = 0;
       int a = 0;
       a++;
       NSLog(@"A = %d", a);
   }
2.修饰全局变量
      只会修改全局变量的作用域,表示只能是当前文件内使用

extern作用
1.声明一个变量,不能定义变量(extern修饰的变量不能初始化)
使用场景:一般用于声明全局变量

static、const联合使用
static:修饰全局变量,修改作用域,表示在当前文件夹中使用
const:修饰变量为只读

static NSString* const showString = @"静态全局只读变量";

静态全局只读变量

const、extern联合使用
const:修饰变量为只读
extern:声明全局变量

#import 

//UIKIT_EXTERN = extern
//extern NSString* c_account_edit_password;
//extern NSString* c_accout_logout;
//extern NSString* c_accout_logout_alert;
//extern NSString* c_accout_logout_alert_logout;

UIKIT_EXTERN NSString* c_account_edit_password;
UIKIT_EXTERN NSString* c_accout_logout;
UIKIT_EXTERN NSString* c_accout_logout_alert;
UIKIT_EXTERN NSString* c_accout_logout_alert_logout;
#import 

NSString* const c_account_edit_password = @"修改登录密码";
NSString* const c_accout_logout = @"退出登录";
NSString* const c_accout_logout_alert = @"您是否要退出登录?";
NSString* const c_accout_logout_alert_logout = @"退出";

你可能感兴趣的:(iOS const,static,extern)