# IOS 对 static extern const #define 的理解

IOS 对 static extern const #define 的理解

  1. const 与宏 #define 的区别:

    1. 编译时刻:#define是预编译 (之前处理), const是编译阶段 (之后处理)
    2. 编译检查:#define不做检查, 有错误不会提示, const会检查, 有错误会提示
    3. 宏的坏处: 大量使用宏#define, 容易造成编译时间过长.
    //宏
    
    #define NavBar_Hight 64
    
    //const
    static CGFloat const NavBar_Hight 64;
    1. static 与 const 结合使用
    1.如果变量用 static 与 const 一起声明了 eg: static CGFloat const NavBar_Hight 64; 那么试图去修改它, 编译器就会报错.
    2. 苹果官方推荐使用const常量, 不推荐使用宏#define
    // 字符串常量
    static NSString *const name = @"zwz";
    1. extern 与 const结合使用
    在开发中需要多个文件中经常使用同一个字符串, 可以使用 extern 与 const结合使用
    1. static与const : 在每个文件都需要定义一份静态全局变量
    2. extern与const : 定义一份全局变量, 多个文件可以共同访问
    
        有时候需要对外公开某个常量。比方说,你可能要在类代码中调用NSNotificationCenter以通知他人。用一个对象来派发通知,令其它欲接收通知的对象向该对象注册,这样就能实现此功能。
    .h文件
    extern NSString *const  Demo;
    
    .m文件
    NSString *const  Demo = @"www.baidu.com";
    
        这样定义常量要优于使用#define预处理指令,因为编译器会确保常量值不变。一旦 .m 文件中定义好了,即可随处使用,而采用预处理指令定义常量可能会无意中修改,从而导致应用程序各个部分使用的值互不相同。 

你可能感兴趣的:(iOS开发)