先看看篇文章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"
这种很适合我们
我们经常声明的常量以及引用是非常麻烦的
网上有一种方法特别简便
声明一个新的类
再他的.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"
这样就可以在代码中 直接用声明的常量了
新手到家