OC中常量与#DEFINE的区别与使用

作者: 柚子CHA | 来源:发表于2016-06-23 18:20 被阅读756次
    先看看篇文章const常量与define宏定义的区别

    http://blog.csdn.net/love_gaohz/article/details/7567856

    简书里的这篇文章也非常的清楚

    http://www.jianshu.com/p/f83335e036b5


    之前虽然同时用宏命令与常量来处理多个地方都用到的字符串,但毫无章法 可读性非常差.
    今天特地学习了一下 学习了几篇文章觉得很不错

    (1) 编译器处理方式不同
      define宏是在预处理阶段展开。
      const常量是编译运行阶段使用。
    (2) 类型和安全检查不同
      define宏没有类型,不做任何类型检查,仅仅是展开。
      const常量有具体的类型,在编译阶段会执行类型检查。
    (3) 存储方式不同
      define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。(宏定义不分配内存,变量定义分配内存。)
      const常量会在内存中分配(可以是堆中也可以是栈中)。
    (4)const 可以节省空间,避免不必要的内存分配。

    这就决定了经常使用常量会对程序来说会很好.

    宏中的#define macro 我们经常用 就不多写了.

    常量的写法:
    static const NSString *str = @"1234";
    const NSString *str = @"1234";
    NSString const *str = @"1234";
    NSString * const str = @"1234";
    
    • const修饰位置不同,代表什么?

    结论:const右边的总不能被修改
    http://www.jianshu.com/p/f83335e036b5

    • 所以我们声明常量又不想被修改
      NSString * const Church = @"church"
      这种很适合我们

    我们经常声明的常量以及引用是非常麻烦的
    网上有一种方法特别简便

    声明一个新的类


    37C7E41A-A3B7-40F3-8AC6-8C0CA58D09B6.png

    再他的.h文件中

    #import <Foundation/Foundation.h>
    //用户token uid
    extern NSString * const UserInfo;
    //用户信息
    extern NSString * const UserData;
    //教堂
    extern NSString *const Church;
    //用户设备信息数据
    extern NSString *const UserDevice;
    //系统版本号
    extern NSString * const Vkey;
    

    .m文件中

    #import "StringConst.h"
    
    NSString * const UserInfo = @"userInfo";
    
    NSString * const UserData = @"userdata";
    
    NSString * const Church =  @"church";
    
    NSString * const UserDevice =  @"userDevice";
    
    NSString *const Vkey = @"CFBundleShortVersionString";
    

    最后在PCH文件中
    #import "StringConst.h"
    这样就可以在代码中 直接用声明的常量了

    90496D7D-4F7B-4FDC-A663-2A101CAA415A.png

    新手到家

    相关文章

      网友评论

        本文标题:OC中常量与#DEFINE的区别与使用

        本文链接:https://www.haomeiwen.com/subject/iitodttx.html