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

學習yykit 一些小小總結

2018-07-20    來源:編程學習網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用


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

#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

他調用的方式是這樣的

//調用的方法  @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

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

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

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


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

標簽: idc 代碼

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

上一篇:只知道API,今天初識SPI

下一篇:TIOBE 2016年3月編程語言排行榜:編程語言呈內部發(fā)展趨勢