您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

ios中宏的使用注意點(diǎn)

大小:0.2 MB 人氣: 2017-09-25 需要積分:1

  前言:

  不得不說(shuō)在C系語(yǔ)言(C, Objective-C, C++.。。)中宏(macro)是個(gè)強(qiáng)大的東西, 雖然在基本的語(yǔ)法上面看上去是非常的簡(jiǎn)單, 不過(guò)有時(shí)候正因?yàn)樗膹?qiáng)大和方便, 就會(huì)導(dǎo)致在使用的時(shí)候, 其中會(huì)有很多的注意點(diǎn), 如果不小心被忽略, 那么將會(huì)帶來(lái)完全不想要的結(jié)果。 所以要想靈活的使用它, 那么還是先了解一些比較好。 而且在iOS開(kāi)發(fā)中如果你是使用OC, 那么你可能經(jīng)常會(huì)使用到#define(swift當(dāng)前不支持宏)

  首先扔出幾個(gè)宏的定義,調(diào)用這些宏的時(shí)候分別是什么結(jié)果, 看看你能夠在不看后面的情況下, 清楚多少, 當(dāng)然, 如果很清楚, 自然可以忽略后文的八卦了。。., 因?yàn)椋?你絕對(duì)比我更了解宏。。.

  1. #define PI 3.14

  2. #define log(x) printf(“this is test: x = %d”, x)

  3. #define log(x) printf(“this is test: ”#x“ = %d”, x)

  4. #define power(x) x*x

  5. #define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]

  6. #define print(。。.) printf(__VA_ARGS__)

  7. #define RGB(r, g, b) {\

  RGBA(r, g, b, 1.0f);\

  }

  8. #define weakify( x ) autoreleasepool{} __weak typeof(x) weak##x = x;

  9. #define weakify(。。.) \ autoreleasepool {} \ metamacro_foreach_cxt(rac_weakify_,, __weak, __VA_ARGS__)

  這里先不解釋上面定義的幾個(gè)宏了, 首先介紹下宏的一些基本東西

  程序第一步是在預(yù)編譯之前會(huì)有一些操作, 例如刪除反斜線和換行符的組合, 將每個(gè)注釋用一個(gè)空格替代。。.

  然后在進(jìn)入預(yù)編譯的時(shí)候, 會(huì)尋找可能存在的預(yù)處理指定(由#開(kāi)頭), 例如C中常用的#include, 或者oc中的#import, #define.。。很多(條件編譯語(yǔ)句。。.)

  處理#define的時(shí)候,然后預(yù)處理器會(huì)從#開(kāi)始, 一直到執(zhí)行到第一個(gè)換行符(寫(xiě)代碼的時(shí)候換行的作用), 自然, #define只會(huì)允許定義一行的宏, 不過(guò)正因?yàn)樯厦嫣岬降念A(yù)處理之前會(huì)刪除反斜線和換行符的組合, 所以可以利用反斜線定義多行宏, 在刪除反斜線和換行符的組合后, 邏輯上就成了一行的宏了

  宏作用在預(yù)編譯時(shí)期, 其真正的效果就是代碼替換, 而且是直接替換(內(nèi)聯(lián)函數(shù)?。。。?這個(gè)和函數(shù)有著很大的區(qū)別, 并且正因?yàn)槭侵苯犹鎿Q, 在使用的時(shí)候就會(huì)有一些的注意點(diǎn)了, 這個(gè)在后面會(huì)給出例子

  宏可以被稱為 類(lèi)對(duì)象宏, 類(lèi)函數(shù)宏(開(kāi)篇給的幾個(gè)宏中都已經(jīng)囊括了這兩類(lèi))

  定義宏的語(yǔ)法很簡(jiǎn)單, 一個(gè)宏定義由三部分組成 , 三分部之間用空格分開(kāi), #define, 宏的名字, 主體 例如第一個(gè)宏#define PI(宏的名字) 3.14(主體), 這里有個(gè)注意點(diǎn)就是, 宏的命名和普通的變量命名規(guī)則相同

  宏在預(yù)處理階段只進(jìn)行文本的替換(相當(dāng)于把代碼拷貝粘貼), 不會(huì)進(jìn)行具體的計(jì)算(發(fā)生在編譯時(shí)期)

  ios中宏的使用注意點(diǎn)

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?