分类直接加属性运行就崩溃?非要强加怎么处理?
原因是分类不允许加属性,如果非要给分类加属性的话,需要开发者自己手动实现 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(这个其实就是把传进来参数保存起来)
返回值: 获取到存储的值
网友评论