在Objective-C中实现目标 - 动作设计模式

emi*_*mix 6 objective-c uikit

我正在尝试在自定义类中实现Target-Action Design Pattern.该接口将具有以下方法:

- (void)addTarget:(id)target action:(SEL)action forEvents:(MyEvents)events;
Run Code Online (Sandbox Code Playgroud)

MyEvents是一个NSUInteger.在我班上存储这些信息的最佳方法是什么?打开文件UIControl.h我注意到UIKit包含以下内容:

NSMutableArray* _targetActions;
Run Code Online (Sandbox Code Playgroud)

我想所有的动作都被添加到这个封装在NSObject中的数组中(我是否需要创建另一个自定义对象或者我可以重用哪些东西?)并且每次需要执行一个动作时它都会使用位掩码迭代数组作为过滤.这是对的吗?

提前致谢.

Chu*_*uck 6

该数组包含一个名为的私有类的实例UIControlTargetAction.它只是一个包含三个实例变量的POD类:

id _target;
SEL _action;
int _eventMask;
Run Code Online (Sandbox Code Playgroud)

您可以非常轻松地创建自己的版本.然后,当你有一个事件时,你只需要做一些事情:

for (MyTargetAction *targetAction in targetActions) {
    if (targetAction.eventMask & myEventMask) {
        [targetAction.target performSelector:targetAction.action];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不得不查看POD代表"普通旧数据",如果这有助于任何人. (6认同)