【问题标题】:Can I tag a UIColor?我可以标记 UIColor 吗?
【发布时间】:2011-01-18 01:21:30
【问题描述】:

我可以标记一个不断改变值的 UIColor 以便从方法中轻松访问吗?

【问题讨论】:

  • 请澄清。 UIColor 中没有标签属性,就像在 UIView 中一样。如果你想要一个对许多方法都可用的颜色对象,只需将它放在 UIColor* 类型的成员变量中。

标签: objective-c uicolor


【解决方案1】:

从 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2011-07-19
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多