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