中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

學(xué)習(xí)yykit 一些小小總結(jié)

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用


昨天看了yykit 注意到有一段給category 動(dòng)態(tài)添加屬性的宏,也沒(méi)深入研究,今天來(lái)仔細(xì)看看

#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)用的方式是這樣的

//調(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

看了上面一段宏定義 和 調(diào)用,大家應(yīng)該還是不太了解為什么那段宏定義就可以實(shí)現(xiàn)動(dòng)態(tài)給category 添加屬性。
先普及一點(diǎn)宏定義 的關(guān)鍵字 一個(gè)# 表示要替換變量 ,兩個(gè) ##要拼接字符串 ,\表示多行 cmd 是iOS 是一種特定宏 ,表示本地方法, 在這里表示 @selector(_setter:)
好的,接下來(lái),新建一個(gè)project 來(lái)模仿這個(gè)案例,也即是如何給category 動(dòng)態(tài)添加屬性,其實(shí)這里關(guān)鍵是是用到了 runtime 的動(dòng)態(tài)關(guān)聯(lián),使用Associate 建立關(guān)聯(lián)動(dòng)態(tài)添加屬性
如果將宏定義轉(zhuǎn)換成代碼將會(huì)這么寫呢

-(void)setMyColor:(UIColor *)myColor
{
    [self willChangeValueForKey:@"myColor"];//kvo 機(jī)制即將修改變量發(fā)送通知
    //1 源對(duì)象
    //2 關(guān)鍵字 唯一靜態(tài)變量key associatedkey
    //3 關(guān)聯(lián)的對(duì)象 sender
    //4 關(guān)鍵策略  OBJC_ASSOCIATION_RETAIN_NONATOMIC
    objc_setAssociatedObject(self, @selector(setMyColor:), myColor, OBJC_ASSOCIATION_RETAIN);
    //
    [self didChangeValueForKey:@"myColor"];//kvo 機(jī)制已修改變量發(fā)送通知
}
-(UIColor *)myColor
{ return objc_getAssociatedObject(self, @selector(setMyColor:));
}

估計(jì)到最后應(yīng)該還會(huì)有這么一個(gè)問(wèn)題,為什么注釋2 關(guān)鍵字寫成了這種@selector(setMyColor:) 這種形式了,其實(shí)關(guān)鍵字是一個(gè)void類型的指針。每一個(gè)關(guān)聯(lián)的關(guān)鍵字必須是唯一的。通常都是會(huì)采用靜態(tài)變量來(lái)作為關(guān)鍵字。所以這里用@selector(setMyColor:)獲取void 類型指針也是可以的


文/嘿晴天(簡(jiǎn)書作者)
原文鏈接:http://www.jianshu.com/p/911d737c6703

標(biāo)簽: idc 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:只知道API,今天初識(shí)SPI

下一篇:TIOBE 2016年3月編程語(yǔ)言排行榜:編程語(yǔ)言呈內(nèi)部發(fā)展趨勢(shì)