使用objc_setAssociatedObject类对象是否正确?
问题描述:
对类对象使用objc_setAssociatedObject
是否正确?使用objc_setAssociatedObject类对象是否正确?
我们经常使用类似的静态变量来模拟类变量: Objective C Static Class Level variables 但是,我们可以使用Associated对象作为替代吗?
objc_setAssociatedObject([self class], &STRING_KEY, myString, OBJC_ASSOCIATION_RETAIN);
答
是的,一类对象是一个完全成熟的对象,所以你可以做任何事情它,你可以用一个普通的对象做。
但是,使用全局变量更清楚和更简单。
p.s.将它与[self class]
相关联与使用全局变量不同,因为[self class]
为您提供了当前对象的实际类,这可能随着此方法由子类继承而变化。而对于全局变量,它始终是相同的变量。
+0
在我的情况下,我有一个基类与许多子类,每个子类需要一个独特的类伊娃(可以这么说),所以这实际上是完美的解决方案! – 2014-04-11 14:08:39
完全没有问题 – 2013-03-25 06:52:12
是的,但对于那些会维护你的代码的人来说,这将更难理解。当您需要添加动态组件数据时,您应该使用objc_setAssociatedObject,但您不知道在编译时要添加什么样的数据/名称。如果你知道它在编译时,你仍然可以使用旧的全局技术;) – 2013-03-25 08:37:43