美文网首页
iOS-为对象添加不存在的属性并赋值取值

iOS-为对象添加不存在的属性并赋值取值

作者: 茄子星人 | 来源:发表于2019-06-26 21:56 被阅读0次

在解析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)")

相关文章

  • iOS-为对象添加不存在的属性并赋值取值

    在解析onevcat大神的Kingfisher框架的时候发现运行时的objc_setAssociatedObjec...

  • iOS 底层 day07 Category上的关联对象

    一、本文解答的问题 1. 为什么类中添加属性可以赋值取值,而分类中添加的属性却不能直接赋值取值呢? 假设添加属性的...

  • 整理值为undefined的几种情况

    变量提升 函数没有返回值 数组下标不存在时,取值 对象中属性名不存在时,取值 定义变量,但未赋值 继续用pop或s...

  • iOS KVC的几种情况简析

    kvc取值时,需注意的几点问题; 讲解一下kvc各种问题,包括基础属性赋值,属性对象的属性赋值,私有属性赋值 以及...

  • 结构赋值

    数组的结构赋值 按顺序排列,取值由位置决定 对象的机构赋值 变量名与属性名必须相同才能取值,先找到同名属性,在赋值...

  • KVC 如何给非对象属性赋值

    kvc给对象属性赋值大家肯定已经很熟悉了,但是怎么给非对象属性赋值呢,现在举例给以结构体为属性并赋值为例: 打印结...

  • ES6 学习(对象解构篇)

    - 对象解构赋值 ** 对象的取值是由属性取值对象的值也可以设置默认值(见数组结构篇) ** 解构例子 如果变量名...

  • js 对象操作

    遍历对象添加一个属性 map 方法添加一个属性 删除对象某个属性 多个对象赋值合并为一个对象 有相同属性的后面对象...

  • 变量

    null 表示对象不存在undefined 表示已声明未赋值获取对象不存在的属性 类型识别typeofString...

  • 【python】学习面向对象编程(一)

    1.对象属性操作 添加、查询、修改、删除 1.1添加 直接赋值 __init__ 方法 1.1.1直接赋值 输出:...

网友评论

      本文标题:iOS-为对象添加不存在的属性并赋值取值

      本文链接:https://www.haomeiwen.com/subject/clahcctx.html