先看看篇文章const常量與define宏定義的區(qū)別
http://blog.csdn.net/love_gaohz/article/details/7567856
簡(jiǎn)書(shū)里的這篇文章也非常的清楚
http://www.reibang.com/p/f83335e036b5
之前雖然同時(shí)用宏命令與常量來(lái)處理多個(gè)地方都用到的字符串,但毫無(wú)章法 可讀性非常差.
今天特地學(xué)習(xí)了一下 學(xué)習(xí)了幾篇文章覺(jué)得很不錯(cuò)
(1) 編譯器處理方式不同
define宏是在預(yù)處理階段展開(kāi)苗桂。
const常量是編譯運(yùn)行階段使用谴餐。
(2) 類(lèi)型和安全檢查不同
define宏沒(méi)有類(lèi)型蟀瞧,不做任何類(lèi)型檢查庇谆,僅僅是展開(kāi)。
const常量有具體的類(lèi)型,在編譯階段會(huì)執(zhí)行類(lèi)型檢查。
(3) 存儲(chǔ)方式不同
define宏僅僅是展開(kāi)酷宵,有多少地方使用,就展開(kāi)多少次躬窜,不會(huì)分配內(nèi)存浇垦。(宏定義不分配內(nèi)存,變量定義分配內(nèi)存荣挨。)
const常量會(huì)在內(nèi)存中分配(可以是堆中也可以是棧中)男韧。
(4)const 可以節(jié)省空間朴摊,避免不必要的內(nèi)存分配。
這就決定了經(jīng)常使用常量會(huì)對(duì)程序來(lái)說(shuō)會(huì)很好.
宏中的#define macro
我們經(jīng)常用 就不多寫(xiě)了.
常量的寫(xiě)法:
static const NSString *str = @"1234";
const NSString *str = @"1234";
NSString const *str = @"1234";
NSString * const str = @"1234";
- const修飾位置不同此虑,代表什么甚纲?
結(jié)論:const右邊的總不能被修改
http://www.reibang.com/p/f83335e036b5
- 所以我們聲明常量又不想被修改
NSString * const Church = @"church"
這種很適合我們
我們經(jīng)常聲明的常量以及引用是非常麻煩的
網(wǎng)上有一種方法特別簡(jiǎn)便
聲明一個(gè)新的類(lèi)
再他的.h文件中
#import <Foundation/Foundation.h>
//用戶(hù)token uid
extern NSString * const UserInfo;
//用戶(hù)信息
extern NSString * const UserData;
//教堂
extern NSString *const Church;
//用戶(hù)設(shè)備信息數(shù)據(jù)
extern NSString *const UserDevice;
//系統(tǒng)版本號(hào)
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"
這樣就可以在代碼中 直接用聲明的常量了
新手到家