美文网首页
Runtime给分类强制加属性

Runtime给分类强制加属性

作者: 愤怒的牛牛 | 来源:发表于2019-05-10 17:19 被阅读0次

分类直接加属性运行就崩溃?非要强加怎么处理?

原因是分类不允许加属性,如果非要给分类加属性的话,需要开发者自己手动实现 set 和 get 方法。

事实上就是把 set 方法里传进来的参数保存在 key 里边,然后把当前对象和传进来的属性关联传起来

set 方法中添加设置关联的函数

objc_setAssociatedObject(self, &key, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

第一个参数: id_Nonnullobject 是关联的源对象(如果在分类中写的话就是当前self)

第二个参数: const void *key:关联的key(这个其实就是把传进来参数保存起来)

第三个参数:  id value 关联对象,通过将此个值置成nil来清除关联。

第四个参数: 关联的语义特性

<指定一个弱引用关联的对象>

OBJC_ASSOCIATION_ASSIGN

<指定一个强引用关联的对象>

OBJC_ASSOCIATION_RETAIN_NONATOMIC

<指定相关的对象复制>

OBJC_ASSOCIATION_COPY_NONATOMIC

<指定强参考>

OBJC_ASSOCIATION_RETAIN

<指定相关的对象复制>

OBJC_ASSOCIATION_COPY    

get 方法中获取关联的值

return  (NSString *)objc_getAssociatedObject(self, &key);

第一个参数: id_Nonnullobject 是关联的源对象(如果在分类中写的话就是当前self)

第二个参数: const void *key:关联的key(这个其实就是把传进来参数保存起来)

返回值: 获取到存储的值

还是看不明白?

愤怒的牛牛的简书

愤怒的牛牛的新浪博客

愤怒的牛牛的GitHub

相关文章

网友评论

      本文标题:Runtime给分类强制加属性

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