如何向类别添加属性

相关问题分类可以添加属性吗? 如果可以,应该如何实现。背景知识我们知道在一个类中增加一个属性,编译器会帮我们做3件事,比如,我们给Person这个类增加一个属性

今天给各位分享如何向类别添加属性的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

多线程问题。每增加一个属性,就必须增加一个新的字段,可扩展性太差。如果添加属性名称,则需要添加一个字段来存储对象对应的名称值。属性存储在字段内,而不是类对象内。

关联对象

#import ‘Person+Test.h’#import objc/runtime.h@implementation Person (Test)- (int)age { return [objc_getAssociatedObject(self, @selector(age)) intValue];}- (void )setAge:(int)age { objc_setAssociatedObject(self, @selector(age), @(age), OBJC_ASSOCIATION_ASSIGN);}@end 这样我们就利用运行时提供的objc_setAssociatedObject 和objc_setAssociatedObject 两个方法来设置和获取属性值分别。就objc_setAssociatedObject 而言,它接受三个参数:

id,表示为当前对象的关联属性。 key,关联属性对应的唯一键。这里我们使用get方法的函数地址值。 value,key对应的value。 objc_AssociationPolicy,存储策略。有5个值,根据属性的类型选择相应的内存存储策略。 OBJC_ASSOCIATION_ASSIGN=0,

OBJC_ASSOCIATION_RETAIN_NONATOMIC=1,

OBJC_ASSOCIATION_COPY_NONATOMIC=3,

OBJC_关联_保留=01401,

OBJC_关联_副本=01403

关联对象实现原理

关联对象底层实现涉及4个类,分别是:

如何向类别添加属性

AssociationsManagerAssociationsHashMapObjectAssociationMapObjcAssociation的实现结构如下:

关联对象的实现原理

其中AssociationsHashMap中的disguished_ptr_t代表对象,AssociationMap中的void *代表key。 ObjectAssociation包含值和存储策略。

我们以上面的Person对象为例来说明一下整体结构。

实现原理

总结

通过上面的分析,我们来回答开场问题:

属性不能直接添加到类别,但可以间接添加。最优雅的方式是通过关联对象将属性绑定到类别。

用户评论

如何向类别添加属性
红玫瑰。

看这篇博文终于明白了怎么在 Category 中添加属性了!之前一直很迷茫,现在试试这个方法应该可以解决我遇到的问题。

    有14位网友表示赞同!

如何向类别添加属性
何必锁我心

这篇文章写的真棒,通俗易懂,即使对编程不熟悉的我也能看懂。感谢分享!

    有16位网友表示赞同!

如何向类别添加属性
无关风月

我原来就是这么操作的!感觉作者说的没错,这种方法简单高效,对于新手来说非常友好。

    有8位网友表示赞同!

如何向类别添加属性
棃海

虽然方法步骤详细,但我还是有点疑惑为什么需要添加 Category 属性?它有什么实际用途呢?希望作者能解释一下,我才能更好地理解。

    有14位网友表示赞同!

如何向类别添加属性
情深至命

我试了一下,结果并没有成功!我的代码没有错误,但 Category 属性还是无法设置。应该是我操作步骤的地方出现了问题吧?!烦死了

    有13位网友表示赞同!

如何向类别添加属性
■□丶一切都无所谓

这个方法听起来不错,但我感觉有点复杂,是不是有更简单的方法可以实现呢?

    有7位网友表示赞同!

如何向类别添加属性
残留の笑颜

我强烈建议作者在文章中加入一些代码示例,这样更容易让人理解和应用。毕竟图片和解释只是辅助性内容。

    有10位网友表示赞同!

如何向类别添加属性
浮殇年华

以前我也想过如何给 Category 添加属性,结果各种方法试了N遍都没有成功!现在看这篇文章豁然开朗啊,感谢分享!我要好好试试这个方法

    有6位网友表示赞同!

如何向类别添加属性
淡抹丶悲伤

我觉得这段话有点绕,能不能用更简洁易懂的语言来描述?我感觉自己还是听不太懂。

    有20位网友表示赞同!

如何向类别添加属性
浮光浅夏ζ

作者写的太抽象了,没有具体案例和步骤讲解,很难理解实际操作方式。希望作者能够更加具体化描述方法和流程,方便新手学习参考。

    有9位网友表示赞同!

如何向类别添加属性
Hello爱情风

看了这篇文章,我明白了添加 Category 属性的好处,这下我的网站就能更灵活地分类内容了!

    有15位网友表示赞同!

如何向类别添加属性
瑾澜

其实我觉得给 Category 添加属性比较冷门的操作,很少有人会用到。文章分析的挺详细的,但是可能并不适合大多数人。

    有11位网友表示赞同!

如何向类别添加属性
等量代换

我感觉这种方法有点鸡肋的感觉,除非有特殊需求,要不然不添加 Category 属性也行啊!觉得作者分析过于深度了,没必要把事情复杂化。

    有7位网友表示赞同!

如何向类别添加属性
巷陌繁花丶

这篇文章给了我很大的启发!原来 Category 还能这样使用。我要去好好研究一下,看看能不能应用到我的项目里.

    有16位网友表示赞同!

如何向类别添加属性
琴断朱弦

我目前还没用到这种方法,但我感觉很有用,我会收藏下来,待以后需要时再参考

    有9位网友表示赞同!

如何向类别添加属性
半梦半醒半疯癫

太感谢了这个博文!终于解决了我一直困扰的问题,现在我可以更自由地管理我的网站分类了。

    有8位网友表示赞同!

如何向类别添加属性
七夏i

文章总结起来还比较清晰易懂,关键点也提出来很到位。 我是新手,对于这方面的学习还不太深入,看了这个文感觉很有帮助!

    有19位网友表示赞同!

如何向类别添加属性
不浪漫罪名

我觉得这种方法对于大型项目来说应该更有效率,如果只是个小网站的话,可能不需要这么复杂的操作。

    有15位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/126023.html

Like (0)
小su的头像小su
Previous 2024年9月1日 下午9:12
Next 2024年9月1日 下午9:17

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注