iOS 巨集的使用

2021-07-25 01:23:02 字數 1127 閱讀 7262

由於平時在開發過程中,經常有遇到使用巨集、常量的時候。但是一直對這兩者的使用有些疑惑。尤其是對const的使用更加模糊,只知道該修飾符有很多種用法,位置不同含義不同。所以特意查詢了一下,為了以後方便自己查閱特此記錄一下。

巨集就相當於是文字替換操作,是編譯期語法,並不會占用到記憶體,因為實質上它根本就不存在於程式中。只是在預處理器裡進行文字替換,沒有型別,不做任何型別檢查,編譯器可以對相同的字串進行優化。只儲存乙份到 .rodata 段。甚至有相同字尾的字串也可以優化,你可以用gcc 編譯試,"hello world" 與 "world" 兩個字串,只儲存前面乙個。取的時候只需要給前面和中間的位址,如果是整形、浮點型會有多份拷貝,但這些數寫在指令中。佔的只是**段而已,大量用巨集會導致二進位制檔案變大。

a.巨集函式:實質上就是文字替換,只不過這裡的替換文字是函式

b.條件編譯(巨集值編譯、巨集是否定義編譯):借助巨集的條件指令,選擇性執行**

c.簡單文字替換:替換文字內容並非函式,是一些簡單的常量常量等。比如字串等

語法格式:#define  巨集文本  替換文字

常用的條件指令:
       

#if           如果  巨集值判斷a

#ifdef      如果定義  根據巨集是否定義b

#ifndef    如果沒定義 

#elif        如果  //else  if          

 #else      否則  與  #if  對應關係           

#endif    結束標識           

#undef   取消巨集和#define  定義巨集 

巨集函式:

條件編譯:

簡單文字替換:

#define  pi  3.14

ios 靈活使用巨集

繼承於c語言和c 中的巨集定義,oc中也可以方便有效的支援巨集定義使用,簡單的巨集定義誰都知道,比如定義乙個int型常量,string型別的字串都可以。如果複雜一些呢,比如用巨集定義實現單例,實現類的歸檔操作,其實都是可以的。就以類的歸檔操作為例,說明一下 現有巨集定義 sscodingimplem...

IOS中巨集的高階使用

先說一下本文中會提到的內容 va args file line function 等 巨集變數 先舉乙個例子,會用到上面這些巨集 cpp view plain copy define myprintf printk lch file s,line d,function s,va args file ...

ios常使用的巨集定義

專案中經常有一些重複使用的 有時我們會將其巨集定義,以便快捷使用。1.rgb顏色值轉換成uicolor物件 顏色轉換 define color r,g,b,a uicolor colorwithred r 255.0 green g 255.0 blue b 255.0 alpha a 2.十六進製...