objc_getAssociatedObject和objc_setAssociatedObject

由于swift中的extension不可以擴展存儲屬性。于是看到了這兩個方法。

這兩個函數都有associate,意思就是關聯。


public func objc_setAssociatedObject(object: AnyObject!, _ key: UnsafePointer, _ value: AnyObject!, _ policy: objc_AssociationPolicy)


public func objc_getAssociatedObject(object: AnyObject!, _ key: UnsafePointer) -> AnyObject!

objc_setAssociatedObject可以將object和value關聯起來。為了可以日后找到這個關聯關系,這里就需要定義一個key。還有關聯的策略policy

enum {
case OBJC_ASSOCIATION_ASSIGN ,
case OBJC_ASSOCIATION_RETAIN_NONATOMIC ,
case OBJC_ASSOCIATION_COPY_NONATOMIC ,
case OBJC_ASSOCIATION_RETAIN ,
case OBJC_ASSOCIATION_COPY
};```

objc_getAssociatedObject就可以利用key找到關聯到object上的那個對象。

這里當把object和value關聯起來以后,這個value就相當于object的一個屬性一樣的存在。

例如:

private struct AssociatedKeys {
static var itemName = "itemName"
}
extension MKAnnotation {
var itemName: String! {
get {
guard let str = objc_getAssociatedObject(self, &AssociatedKeys.itemName) as? String else { return nil }
return str
}
set {
objc_setAssociatedObject(self, &AssociatedKeys.itemName, String(newValue),.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}




還看到有文章寫到可以利用這兩個函數傳值,或者給button增加一個blockHandler,還可以做其他好多事,暫時沒有接觸到。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,774評論 0 9
  • 1.runtime體驗 1.1.引言 運行時作為面試題中高階問題必不可少的一個技能點。經常面試官會問道是否使...
    2897275c8a00閱讀 978評論 0 5
  • 耳機線連著身體,白色的蛇纏著靈魂 高舉手機就像吊瓶等上天輸進精神 仿佛生了六只翅膀 念著旁人困惑的旨意,勻稱的腳步...
    昵稱_不存在的閱讀 132評論 0 0
  • 原文鏈接:http://www.cnblogs.com/liudp/p/7299552.html 1.mount掛...
    hasu閱讀 2,207評論 0 0
  • (一) 一扇腰門, 關不住, 昔日的榮華; 雕梁畫棟, 金粉騎樓, 回響著清冽的 四季之歌; 流淌出多少代人的 悲...
    SpringTang閱讀 768評論 3 3