Могу ли я пометить UIColor? - PullRequest
1 голос
/ 17 февраля 2010

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

1 Ответ

2 голосов
/ 18 февраля 2010

Начиная с 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. См. этот вопрос для получения дополнительной информации.)

Вы также можете прочитать этот пост , который затрагивает использование этого метода для хранения ключей.

Примечание: я не говорю, что это лучший способ решения проблемы. Как говорится в руководстве по программированию Objective-C, связанные объекты в основном предназначены для ситуаций, когда

у вас нет доступа к источнику код для класса, или если для причины бинарной совместимости вы не может изменить расположение объекта.

Читать все об этом здесь .

...