坏级尹 发表于 前天 12:47

设计模式之 Target/Action

认真对待每时、每刻每一件事,把握当下、立即去做。
iOS 中的 Target-Action 设计模式是一种事件响应机制,用于在用户交互时触发特定对象的方法调用。
一. 基本概念

组成元素‌:

[*]‌Target‌:接收消息的对象,通常是控制器(如UIViewController)。
[*]‌Action‌:目标对象中待调用的方法,需符合特定签名格式(如-(void)doSomething:(id)sender)。
‌设计目的‌:
通过解耦事件触发与处理逻辑,实现低耦合、高内聚的交互设计,典型应用于UIControl 子类(如 UIButton、UISlider)。
二、实现方式

‌代码绑定‌:使用 addTarget:action:forControlEvents: 方法动态关联目标与动作,例如:
[button addTarget:self
          action:@selector(handleClick:)
forControlEvents:UIControlEventTouchUpInside];其中 self 为 Target,handleClick: 为Action。
Interface Builder 绑定:‌
通过拖拽方式在 XIB 或 Storyboard 中连接控件与控制器方法,需声明 IBAction 返回值类型以暴露接口。
三、技术细节

‌Action 方法签名‌:支持多种形式,包括:

[*]-(void)doSomething
[*]-(void)doSomething:(id)sender
[*]-(IBAction)doSomething:(id)sender forEvent:(UIEvent*)event
参数 sender 为触发事件的控件,event 包含触摸信息。
事件传递机制:‌当用户操作控件时,系统调用 sendAction:to:forEvent: 方法,通过 Target 的 SEL 选择器执行对应方法。
四、扩展应用

‌自定义控件:‌可手动实现 Target-Action 模式,例如在自定义视图中定义 target 和 action 属性,通过 performSelector: 调用目标方法。
‌频率控制‌:结合 Runtime 的方法交换(Method Swizzling),可限制按钮点击频率,避免重复请求。
五、与其他模式对比

与 Delegate 区别‌:Target-Action 为单向通信,适用于简单事件;Delegate 需定义协议,适合复杂交互。
与 Block 区别‌:Block 更灵活但可能引起循环引用,Target-Action 结构更清晰。

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除
页: [1]
查看完整版本: 设计模式之 Target/Action