Runtime给分类强制加属性

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

原因是分类不允许加属性,如果非要给分类加属性的话,需要开发者自己手动实现 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(这个其实就是把传进来参数保存起来)

返回值: 获取到存储的值


还是看不明白?

Runtime给分类强制加属性_第1张图片
Runtime给分类强制加属性_第2张图片


愤怒的牛牛的

愤怒的牛牛的新浪博客

愤怒的牛牛的GitHub

你可能感兴趣的:(Runtime给分类强制加属性)