iOS-為對象添加不存在的屬性并賦值取值

在解析onevcat大神的Kingfisher框架的時候發現運行時的objc_setAssociatedObjectobjc_getAssociatedObject函數可以為不存在的屬性賦值取值,奇怪怎么網上的運行時博文怎么都沒提到過,清一色的都是分類中為屬性添加實現的功能。

...
func getAssociatedObject<T>(_ object: Any, _ key: UnsafeRawPointer) -> T? {
    return objc_getAssociatedObject(object, key) as? T
}

func setRetainedAssociatedObject<T>(_ object: Any, _ key: UnsafeRawPointer, _ value: T) {
    objc_setAssociatedObject(object, key, value, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
...
var placeholderKey: Void?
setRetainedAssociatedObject(self, &placeholderKey, "helloworld")
let str: String = getAssociatedObject(self, &placeholderKey) ?? ""
print(str)
...
func getAssociatedObject<T>(_ object: Any, _ key: String) -> T? {
    return objc_getAssociatedObject(object, key) as? T
}

func setRetainedAssociatedObject<T>(_ object: Any, _ key: String, _ value: T) {
    objc_setAssociatedObject(object, key, value, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
...

setRetainedAssociatedObject(self, "sob", "helloworld")
let str: String = getAssociatedObject(self, "sob") ?? ""
print("print:\(str)")

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。