前言
更確切的說,這篇文章不全是寫如何給分類添加屬性的红淡,甚至不全是寫runtime的队贱,畢竟很多知識都有交叉,姑且算是關(guān)于category的一篇雜文吧住拭。這里給出3種添加category屬性的方法,如果還有其他方法歡迎交流
正文
既然是雜文历帚,還是先引個例子
運行結(jié)果什么情況滔岳?我讀書少你不要騙我。挽牢。按照消息轉(zhuǎn)發(fā)中的理論谱煤,程序不是該crash嗎?但是想想看禽拔,消息轉(zhuǎn)發(fā)是在沒找到實現(xiàn)的情況下才執(zhí)行的刘离,先別急著說沒有+ (void)test
的實現(xiàn),再看一次類與元類吧
NSObject的metalclass的superclass仍然是NSObject
[NSObject test]
先到NSObject
的metalclass
中尋找+ (void)test
沒找到再到metalclass
的superclass
中尋找睹栖,顯然可以找到這個家伙硫惕,因為元類的實例方法就是類的對象方法(這里可能有點繞,偷個懶野来,不畫圖了恼除。。)曼氛,既然找到了實現(xiàn)程序自然不會crash也不會執(zhí)行消息轉(zhuǎn)發(fā)
上個例子是給分類添加方法豁辉,下邊說說給分類添加屬性
分類其實是可以添加屬性的,只是不能添加成員變量舀患,同樣可以使用@property
徽级,但是只生成getter
和setter
并且不會自動實現(xiàn),因為不會生成帶下劃線的成員變量聊浅,所以無法作為中間變量進行傳值餐抢,既然如此加個變量傳參就好
變量法
這里的思想是:缺什么補什么
容器法
顯然现使,和第一種方式相比,這樣寫很傻X弹澎。當然朴下,這里也可以換成可變數(shù)組來實現(xiàn)。
這里的思想是:偷梁換柱
runtime法
這是runtime專為彌補category設(shè)計上不足而準備的解決方案
這里的思想是:多讀書苦蒿,學(xué)無止境
代碼很容易理解殴胧,不再做過多介紹