2010-02-17 3 views
1

Могу ли я пометить UIColor, который постоянно меняет значения для легкого доступа к методам?Можно ли пометить UIColor?

+0

Уточните пожалуйста. В UIColor нет свойства тега, например, в UIView. Если вам нужен объект цвета, который легко доступен для многих методов, просто поместите его в переменную-член типа UIColor *. –

ответ

2

С 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.

Смежные вопросы