修飾常量:
<code class=" hljs cs">void testConst() { const int age1 = 20; int const age2 = 30; }</code>
當是這種情況的時候:效果是一樣的,這個時候 age1\age2是常量, 只讀
當修飾指針的時候,分情況
就近原則 靠近誰 誰就相當於常量 不可重新賦值或者重新指向
<code class=" hljs cs">void testConst2() { int age = 20; // const的修飾的*p1和*p2,*p1和*p2是常量,不能通過p1、p2指針間接修改其他變量的值 const int *p1 = &age; int const *p2 = &age; int num = 30; p1 = # p2 = # // const修飾的p3,p3是個常量,p3不能再指向其他變量 int * const p3 = &age; // 寫法錯誤 // int num = 30; // p3 = # // 寫法正確 // *p3 = 30; } </code>
const的修飾的*p1和*p2,*p1和*p2是常量,不能通過p1、p2指針間接修改其他變量的值
那麼我們在項目中,應該怎麼使用呢?
我們定義一個類 :比如這個類中是我們項目中的一些數據
ZYConst.h文件中:
<code class=" hljs objectivec">#import <foundation foundation.h=""> // 通知 // 表情選中的通知 extern NSString * const ZYEmotionDidSelectNotification; extern NSString * const ZYSelectEmotionKey; // 刪除文字的通知 extern NSString * const ZYEmotionDidDeleteNotification;</foundation></code>
ZYConst.m中:
<code class=" hljs objectivec">#import <foundation foundation.h=""> // 通知 // 表情選中的通知 NSString * const ZYEmotionDidSelectNotification = @"ZYEmotionDidSelectNotification"; NSString * const ZYSelectEmotionKey = @"ZYSelectEmotionKey"; // 刪除文字的通知 NSString * const ZYEmotionDidDeleteNotification = @"ZYEmotionDidDeleteNotification";</foundation></code>
那我們在pch中,直接導入這個ZYConst文件就可以了
#import "ZYConst.h"
那麼整個項目中,就有了我們在這個類中定義的一些變量
好處:
使用const修飾的,在內存中就只有一份,那麼無論你在項目中的哪裡使用,都是這一份,所以強烈推薦使用 使用宏的話:宏是在編譯的時候 將我們定義的宏的內容,直接編譯成我們寫的字符串,那麼可能存在多次創建,多次調用的。
// RGB顏色
#define ZYColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
// 隨機色
#define ZYRandomColor HWColor(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))
這個時候,就不能使用const,因為const後面接的內容不能是通過一些計算出來的結果,而是一些死的東西。