美文网首页
关于Objective-C中为什么不能直接给分类添加属性的讲解及

关于Objective-C中为什么不能直接给分类添加属性的讲解及

作者: 是土豆啊丶 | 来源:发表于2017-06-01 14:59 被阅读0次

Objective-C中为什么不能直接添加分类?

        在Objective-C中,当我们给一个类添加一个分类时,如果在分类中定义了属性,后来代码中直接调用该属性,程序会报错,报错的原因是因为平常当我们使用@property声明一个属性时,系统会自动给我们生成带下划线的成员变量及对应的setter和getter方法,但是当我们在分类中声明属性时,系统并不会像平常一样为我们生成成员变量及setter和getter方法,它只会为我们在属性列表里添加相应的属性,所以当我们在代码中直接调用分类中的属性时,程序会报错,提示找不到相应的方法。

自定义的Atom类 示例

解决办法

      要想在分类中添加属性,我们可以采用通过运行时建立关联引用,如下代码,通过这个方式就能顺利在分类中添加属性啦。

具体实现

        最后对于objc_setAssociatedObject方法的参数做一个说明,该方法一共有4个参数,分别是源对象,关联时的用来标记是哪一个属性的key(因为你可能要添加很多属性),关联的对象和一个关联策略,用来标记是哪一个属性的key有三种常见的写法,效果都一样,如下:

示例

关联策略是一个枚举值,和属性的特性类似。

相关文章

网友评论

      本文标题:关于Objective-C中为什么不能直接给分类添加属性的讲解及

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