【发布时间】:2011-01-18 01:21:30
【问题描述】:
我可以标记一个不断改变值的 UIColor 以便从方法中轻松访问吗?
【问题讨论】:
-
请澄清。 UIColor 中没有标签属性,就像在 UIView 中一样。如果你想要一个对许多方法都可用的颜色对象,只需将它放在 UIColor* 类型的成员变量中。
标签: objective-c uicolor
我可以标记一个不断改变值的 UIColor 以便从方法中轻松访问吗?
【问题讨论】:
标签: objective-c uicolor
从 iPhone SDK 3.1 开始,您可以使用objc_setAssociatedObject。你会做这样的事情:
objc_setAssociatedObject(myColor, infoObject, &keyObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
注意1:值必须是一个对象。您不能将整数设置为值。
要检索值:
id aTag = objc_getAssociatedObject(myColor, &keyObject);
注意 2:keyObject 必须与您在设置值时使用的相同的对象。如果您发送另一个具有相同值的对象,它将不起作用。
如果你以后想释放标签值:
objc_setAssociatedObject(myColor, nil, &keyObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
(由于一个错误,这在 iPhone 模拟器中不起作用。有关详细信息,请参阅 this question。)
您还可以阅读this post,其中涉及使用此方法存储密钥。
注意:我并不是说这是处理问题的最佳方式。正如 Objective-C 编程指南所述,关联对象主要用于以下情况:
您无权访问源 类的代码,或者如果 二进制兼容性的原因 无法更改对象的布局。
阅读所有相关信息here。
【讨论】: