#define 宏定義的黑魔法

Xcode 編程,Objective-C 宏定義

/*1. 讓宏定義有提示

#define kClassAttributeString(objc, path) objc.path
>1.分析宏定義的本質是,每輸入一個字母,就進行拷貝翻譯成後面的形式

>2.所以當我們第第一個參數 輸入 self 的時候,翻譯 成 代碼就是  self.   那麼後面就會有提示,也就是輸入宏定義的 path參數的時候,其實代碼是就已經變成了 self.  什麼 那麼path 就自然有提示了

*/

/*2. 得到屬性的 C 字符串

#define kClassAttributeString(objc, path) (objc.path, #path)

>1這裏我們想得到的是 屬性的 字符串 可以使用 宏定義中的 #  這個表示後面的參數變成""  的C字符串,然而我們又想有提示,那麼就使用 逗號運算符號  ,  表示最右邊的是結果

*/

/*3. 忽略掉 , 逗號運算的前面的東西,讓編譯的時候不報警告

#define kClassAttributeString(objc, path) ((void)objc.path, #path)

>1但是我們想忽略掉前面的參數,因爲那些用宏定義會變成  (self.view.frame, "frame")  但是 self.view.frame 是一個get方法,沒有接受的容器,會報警告,那麼我們可以使用(void)忽略掉

*/

/*4. 加入 @ 得到 OC 字符串

#define kClassAttributeString(objc, path) @(((void)objc.path, #path))

也可以這樣寫

#define kClassAttributeString(objc, path) ((void)objc.path, @#path)

>1加上 @ 得到OC的字符串

*/

//運用到KVO,KVC 能夠拿到屬性的字符串表示,又可以有提示

#define kClassAttributeString(objc, path) @(((void)objc.path, #path))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章