首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C教程:Target-Action目標動作回調機制詳解

     編輯:關於C語言

Objective-C教程:Target-Action目標動作回調機制詳解

一、回調概念

回調(Callback)即事件觸發機制。組件在特定事件發生時,主動通知使用者。如開關狀態改變需通知燈具亮滅,開關無法預知使用者是誰,故需回調機制動態綁定處理邏輯。

二、Target-Action模式

蘋果Cocoa框架核心回調模式之一,包含兩要素:

  • Target(目標):接收回調的對象,類型id(任意對象)
  • Action(動作):回調觸發的方法,類型SEL(方法選擇器)

SEL獲取方式:SEL action = @selector(methodName:);

三、虛擬組件示例:開關與燈

燈

@interface Light : NSObject
- (void)turnOn;  // 開燈
- (void)turnOff; // 關燈
@end

開關

typedef enum : NSUInteger {
    SwitchStateOff, // 默認關閉
    SwitchStateOn
} SwitchState;

@interface Switch : NSObject
@property (nonatomic, assign, readonly) SwitchState currentState;
- (void)addChangeStateTarget:(id)target action:(SEL)action;
@end

四、使用場景:房間控制燈具

@interface Room : NSObject
@property (nonatomic, strong) Light *light;
@property (nonatomic, strong) Switch *switch;
- (void)changeState:(Switch *)sender;
@end

@implementation Room
- (instancetype)init {
    self = [super init];
    if (self) {
        self.light = [[Light alloc] init];
        self.switch = [[Switch alloc] init];
        // 設置回調:self為target,changeState:為action
        [self.switch addChangeStateTarget:self action:@selector(changeState:)];
    }
    return self;
}

- (void)changeState:(Switch *)sender {
    if (sender.currentState == SwitchStateOff)
        [self.light turnOn];
    else
        [self.light turnOff];
}
@end

五、核心流程

  1. 創建組件實例(alloc/init)
  2. 調用組件註冊方法(addChangeStateTarget:action:)綁定target與action
  3. 組件內部事件觸發時,執行[target performSelector:action withObject:self]
  4. target對象的action方法被調用,執行業務邏輯

六、特點與局限

優點缺點
靈活:調用者自定義回調方法名參數固定:通常僅傳送觸發對象(self),額外數據需通過對象屬性獲取
鬆耦合:組件不知target具體類型一對一:一個控件僅支持一組target-action
動態綁定:運行時決定無編譯期檢查:selector拼寫錯誤運行時崩潰

適用於簡單控件(按鈕、開關、滑桿)的狀態變更通知。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved