淺析YYKit(base 篇)之頭文件解析 1

yykit 是最近一個很火的開源框架状勤,今天來研究看看yykit源碼和一些原理,剛拿到y(tǒng)ykit還是 很驚訝夕春,來看看yykit 的目錄未荒,功能不僅強大,而且是十分全面的及志,我們來看看他的目錄結(jié)構(gòu)


EA102D35-DD95-4EFA-8098-325B855E8CE7.png

不得不驚嘆片排,真的好全面,一篇文章根本看不完速侈,今天還是先從base 說起吧率寡,

09ECF4C2-6F37-40F8-BCBB-EEAD1AE9C19F.png

展開base 也是不少東西,先來看看這個頭文件定義了什么吊炸天的東西
一開始看就尼瑪就卡主了倚搬,

#ifdef __cplusplus
#define YY_EXTERN_C_BEGIN  extern "C" {
#define YY_EXTERN_C_END  }
#else
#define YY_EXTERN_C_BEGIN
#define YY_EXTERN_C_END
#endif

這是什么鬼啊冶共,各種百度,google之后總算是有些眉目了
先看 #ifdef __cplusplus google 之后發(fā)現(xiàn) c++中定義了__cplusplus每界,C語言中沒有該定義捅僵。即這個是用來:識別是c代碼還是c++代碼
在看EXTERN_C ,調(diào)用extern "C"會讓c++編譯器按照c的編譯格式來編譯眨层。多用于c++庫的頭文件庙楚。 也即是說這個在c++的環(huán)境下,會強制編譯器用 C 語言的規(guī)則去編譯趴樱,而不是用 C++ 語言的規(guī)則馒闷。。因為 C++ 為了實現(xiàn)函數(shù)重載會把函數(shù)名和參數(shù)等聯(lián)合起來合成一個中介的函數(shù)名叁征,如果 C 函數(shù)也被這樣編譯會出問題纳账,所以在我看來這個是為了兼容c++環(huán)境不會編譯報錯。
好吧解決了這個 在往下看看有什么比較難理解的東西
接下來是一個兩重判斷的 宏定義

#ifndef YY_CLAMP // return the clamped value
#define YY_CLAMP(_x_, _low_, _high_)  (((_x_) > (_high_)) ? (_high_) : (((_x_) < (_low_)) ? (_low_) : (_x_)))
#endif

咋一看不知道有什么用寫成if else 語句大概是

    if(x>high)
        return high;
    else
    {
        if(x<low)
            return  low;
        else
            return  x;
    }

好吧接下來往下看吧

#ifndef YY_SWAP // swap two value
#define YY_SWAP(_a_, _b_)  do { __typeof__(_a_) _tmp_ = (_a_); (_a_) = (_b_); (_b_) = _tmp_; } while (0)
#endif

雖然這個一眼就看出來是個交換 函數(shù)還是有兩個地方需要注意的為什么要用這個關(guān)鍵字呢typeof 還有為什么要用do while 直接用if else 不是就行了嗎
百度一下你就知道
typeof(var) 是gcc對C語言的一個擴展保留字捺疼,用于聲明變量類型,var可以是數(shù)據(jù)類型(int疏虫, char*..),也可以是變量表達式。也即是說 變量a 還可以是個變量表達式這里吊吊的
啤呼,但為啥要用do while 這里就請眾大神指點迷津了议薪。

就不一一解析,看一些比較特別的吧

#ifndef YYSYNTH_DUMMY_CLASS
#define YYSYNTH_DUMMY_CLASS(_name_) \
@interface YYSYNTH_DUMMY_CLASS_ ## _name_ : NSObject @end \
@implementation YYSYNTH_DUMMY_CLASS_ ## _name_ @end
#endif

這一段還是挺特別的媳友, 但oc 編譯靜態(tài)庫 要在build setting other linker flag設(shè)置 -all_load 和-Objc才可以將category 編進去
使用這段宏定義他可以虛擬新建一個與名字category 相同.h.m 讓編譯器 編譯通過
但是每次要對所有category 都要申明這個的話可能會比較麻煩,直接加-all_load 據(jù)官方文檔說产捞,它可以使生成的可執(zhí)行文件較大醇锚,并且產(chǎn)生一些不需要的文件

#ifndef YYSYNTH_DYNAMIC_PROPERTY_OBJECT
#define YYSYNTH_DYNAMIC_PROPERTY_OBJECT(_getter_, _setter_, _association_, _type_) \
- (void)_setter_ : (_type_)object { \
    [self willChangeValueForKey:@#_getter_]; \
    objc_setAssociatedObject(self, _cmd, object, OBJC_ASSOCIATION_ ## _association_); \
    [self didChangeValueForKey:@#_getter_]; \
} \
- (_type_)_getter_ { \
    return objc_getAssociatedObject(self, @selector(_setter_:)); \
}
#endif
//調(diào)用的方法
  @interface NSObject (MyAdd)
     @property (nonatomic, retain) UIColor *myColor;
     @end
     
     #import <objc/runtime.h>
     @implementation NSObject (MyAdd)
     YYSYNTH_DYNAMIC_PROPERTY_OBJECT(myColor, setMyColor, RETAIN, UIColor *)
     @end

使用runtime 運行時屬性 給catetory 動態(tài)添加屬性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焊唬,更是在濱河造成了極大的恐慌恋昼,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赶促,死亡現(xiàn)場離奇詭異液肌,居然都是意外死亡,警方通過查閱死者的電腦和手機鸥滨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門嗦哆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婿滓,你說我怎么就攤上這事老速。” “怎么了凸主?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵橘券,是天一觀的道長。 經(jīng)常有香客問我卿吐,道長旁舰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任嗡官,我火速辦了婚禮箭窜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谨湘。我一直安慰自己绽快,他們只是感情好,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布紧阔。 她就那樣靜靜地躺著坊罢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擅耽。 梳的紋絲不亂的頭發(fā)上活孩,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音乖仇,去河邊找鬼憾儒。 笑死,一個胖子當著我的面吹牛乃沙,可吹牛的內(nèi)容都是我干的起趾。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼警儒,長吁一口氣:“原來是場噩夢啊……” “哼训裆!你這毒婦竟也來了眶根?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤边琉,失蹤者是張志新(化名)和其女友劉穎属百,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體变姨,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡族扰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了定欧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渔呵。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖忧额,靈堂內(nèi)的尸體忽然破棺而出厘肮,到底是詐尸還是另有隱情,我是刑警寧澤睦番,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布类茂,位于F島的核電站,受9級特大地震影響托嚣,放射性物質(zhì)發(fā)生泄漏巩检。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一示启、第九天 我趴在偏房一處隱蔽的房頂上張望兢哭。 院中可真熱鬧歧蕉,春花似錦丑慎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矩父。三九已至,卻和暖如春排霉,著一層夾襖步出監(jiān)牢的瞬間窍株,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工攻柠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留球订,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓瑰钮,卻偏偏與公主長得像冒滩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浪谴,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • http://blog.csdn.net/u013059266/article/details/46998703 ...
    狼之獨步閱讀 796評論 0 1
  • 1.項目經(jīng)驗 2.基礎(chǔ)問題 3.指南認識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 4,999評論 0 13
  • 概述:聲明是將一個名稱引入一個程序.定義提供了一個實體在程序中的唯一描述.聲明在單個作用域內(nèi)可以重復多次(類成員除...
    抓兔子的貓閱讀 625評論 0 3
  • 六一兒童節(jié) 今天是女兒的節(jié)日,她為這個節(jié)日付出了太多士八,每天高強度的練習至少四個小時,但她從來沒說過苦梁呈,反而很享受這...
    鳴鷗閱讀 358評論 0 2
  • ~~某一天晚上婚度,我和幾個朋友在路邊的燒烤攤吃飯聊天,酒至酣時官卡,有人在靜寂中拋出一句蝗茁,成都的酒醉人。我們吃驚的望著眼...
    黑米洲閱讀 413評論 0 0