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

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

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

自定义的Atom类


示例

解决办法

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

具体实现


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

示例

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容