Реализация шаблона проектирования Target-Action в Objective-C - PullRequest
6 голосов
/ 10 мая 2011

Я пытаюсь реализовать шаблон проектирования Target-Action в пользовательском классе. Интерфейс будет иметь следующий метод:

- (void)addTarget:(id)target action:(SEL)action forEvents:(MyEvents)events;

MyEvents является NSUInteger. Как лучше всего хранить эту информацию в моем классе? Открыв файл UIControl.h, я заметил, что UIKit содержит следующее:

NSMutableArray* _targetActions;

Я предполагаю, что все действия добавляются в этот массив, инкапсулированный в NSObject (мне нужно создать другой пользовательский объект или есть что-то, что я могу использовать повторно?), И каждый раз, когда ему нужно выполнить действие, он выполняет итерацию массива с битовая маска как фильтр. Это правильно?

Заранее спасибо.

1 Ответ

6 голосов
/ 10 мая 2011

Этот массив содержит экземпляры закрытого класса с именем UIControlTargetAction.Это просто класс POD с тремя переменными экземпляра:

id _target;
SEL _action;
int _eventMask;

Вы можете довольно легко создать свою собственную версию.Затем, когда у вас есть событие, вы просто делаете что-то вроде:

for (MyTargetAction *targetAction in targetActions) {
    if (targetAction.eventMask & myEventMask) {
        [targetAction.target performSelector:targetAction.action];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...