經驗之談 PCH 中使用 const 與巨集

2021-12-29 21:42:12 字數 1697 閱讀 5826

很多時候,由於開發的需要,我們常常需要在pch中定義一些在整個專案中都用得到的變數等 一般來說,在以前的開發過程中,我們都習慣於直接在pch中寫乙個巨集就搞定了。但是我們仔細的分析蘋果官方文件,會發現,他裡面定義的一些變數,不是用巨集定義的,而是用const 那我們就要知道為什麼用const了,首先了解一下const的一些基本的使用,在c語言的語法中,若我們若const休息一些變數會出現什麼情況,簡單了解一下,這也是面試常問的內容:

那麼就簡單的回顧一下吧:

修飾常量:

void testconst()

當是這種情況的時候:效果是一樣的,這個時候 age1\age2是常量, 唯讀

當修飾指標的時候,分情況

就近原則 靠近誰 誰就相當於常量 不可重新賦值或者重新指向

void testconst2()

const的修飾的*p1和*p2,*p1和*p2是常量,不能通過p1、p2指標間接修改其他變數的值

那麼我們在專案中,應該怎麼使用呢?

我們定義乙個類 :比如這個類中是我們專案中的一些資料

zyconst.**件中:

#import

// 通知

// 表情選中的通知

extern nsstring * const zyemotiondidselectnotification;

extern nsstring * const zyselectemotionkey;

// 刪除文字的通知

extern nsstring * const zyemotiondiddeletenotification;zyconst.m中:

#import

// 通知

// 表情選中的通知

nsstring * const zyemotiondidselectnotification = @"zyemotiondidselectnotification";

nsstring * const zyselectemotionkey = @"zyselectemotionkey";

// 刪除文字的通知

nsstring * const zyemotiondiddeletenotification = @"zyemotiondiddeletenotification";那我們在pch中,直接匯入這個zyconst檔案就可以了

#import "zyconst.h"那麼整個專案中,就有了我們在這個類中定義的一些變數

好處:使用const修飾的,在記憶體中就只有乙份,那麼無論你在專案中的**使用,都是這乙份,所以強烈推薦使用 使用巨集的話:巨集是在編譯的時候 將我們定義的巨集的內容,直接編譯成我們寫的字串,那麼可能存在多次建立,多次呼叫的。

注意

有些時候,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後面接的內容不能是通過一些計算出來的結果,而是一些死的東西。

面試經驗之談

這裡是2017年11月7日,鄙人不才,17年應屆畢業,經驗不足,十一之後來到上海找工作,目前一無所獲。無奈,今天又逛了一趟培訓機構,看著和自己年齡相仿同學在前台焦急等待的時候感觸頗深,為什麼總是接到培訓機構的邀請,而不見想象之中offer也看不見期待的公司的回覆。剛好有哥哥姐姐在上海這邊,所以借住在...

併發控制經驗之談

多年使用鎖的經驗說明,我們很難駕輕就熟地使用鎖。併發的管理本來就非常棘手,而許多使用方法都可能導致錯誤。本文將總結一些併發控制中容易導致錯誤的東西。不明確的規則 恰當的鎖定模式需要清晰和明確的規則。當我們建立乙個可被並行訪問的物件時,應該同時定義用來控制訪問的鎖。鎖定模式必須在一開始就安排好,否則其...

幾次面試經驗之談

幾次面試經驗之談 文 飛天含雪 從十一假期結束到現在,近乙個月了,大大小小的面試總共參加了六七場,對面試有些感想,筆者知道網上談論該話題也多,但要麼片面,要麼扯淡,不僅達不到目的,反而有誤導民眾之嫌,筆者今日將經驗之談一一和盤托出,希望大家能有所借鑑。一 首當其衝 者 凶多吉少 收拾殘局 者 漁翁得...