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

发布于 2024-11-05 21:39:01 字数 406 浏览 1 评论 0原文

我正在尝试在自定义类中实现目标操作设计模式。该接口将具有以下方法:

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

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

NSMutableArray* _targetActions;

我想所有操作都添加到封装在 NSObject 中的这个数组中(我需要创建另一个自定义对象还是有一些我可以重用的东西?)并且每次它需要执行一个操作,它使用位掩码作为过滤器迭代数组。正确吗?

提前致谢。

I'm trying to implement the Target-Action Design Pattern in a custom class. The interface will have the following method:

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

MyEvents is a NSUInteger. What's the best way to store these informations on my class? Opening the file UIControl.h I noticed that UIKit contains the following:

NSMutableArray* _targetActions;

I suppose that all actions are added in this array encapsulated in an NSObject (do I need to create another custom object or is there something I can reuse?) and every time it needs to perform an action it iterates the array using the bitmask as a filter. Is it correct?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏末的微笑 2024-11-12 21:39:01

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

id _target;
SEL _action;
int _eventMask;

您可以非常轻松地创建自己的版本。然后,当您有活动时,您只需执行以下操作:

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

That array holds instances of a private class called UIControlTargetAction. It's just a POD class that has three instance variables:

id _target;
SEL _action;
int _eventMask;

You could create your own version quite easily. Then, when you have an event, you just do something like:

for (MyTargetAction *targetAction in targetActions) {
    if (targetAction.eventMask & myEventMask) {
        [targetAction.target performSelector:targetAction.action];
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文