日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[objective-c] 04 - 消息机制 回调 目标-动作回调

發(fā)布時(shí)間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [objective-c] 04 - 消息机制 回调 目标-动作回调 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

本章主要講解回調(diào)的概述以及具有目標(biāo)-動(dòng)作回調(diào)接口的組件如何使用。

1.回調(diào)

回調(diào),也叫事件觸發(fā),在底層開(kāi)發(fā)中也就是服務(wù)或中斷服務(wù)。其產(chǎn)生過(guò)程較為復(fù)雜,所以我們?cè)诖瞬粫?huì)展開(kāi)講解。只是單純講解如何配置回調(diào)。

在使用一些較為復(fù)雜,或者和用戶(hù)有交互類(lèi)型的組件時(shí)。我們通常需要根據(jù)組件觸發(fā)的事件來(lái)做出相應(yīng)的響應(yīng)。

比如我們使用一個(gè)開(kāi)關(guān)控制一個(gè)燈。我們?cè)诰帉?xiě)代碼的時(shí)候并不能準(zhǔn)確的知道開(kāi)關(guān)的狀態(tài),也就無(wú)法確定燈的狀態(tài)。所以我們只能在開(kāi)關(guān)狀態(tài)發(fā)生改變的時(shí)候,獲取開(kāi)關(guān)的狀態(tài)且根據(jù)開(kāi)關(guān)的狀態(tài)對(duì)燈的狀態(tài)進(jìn)行改變。

這時(shí)候就需要開(kāi)關(guān)有一個(gè)能反饋?zhàn)陨頎顟B(tài)的機(jī)制。這種機(jī)制便成為回調(diào)機(jī)制。

我們?cè)诰幊讨锌梢酝ㄟ^(guò)回調(diào)機(jī)制讓代碼在運(yùn)行的過(guò)程中捕獲開(kāi)關(guān)狀態(tài)的改變點(diǎn),從而實(shí)現(xiàn)對(duì)燈的控制。

回調(diào)機(jī)制具體有三種表現(xiàn)形式:

  • 目標(biāo)-動(dòng)作回調(diào)
  • 委托模式回調(diào)
  • 代碼塊回調(diào)
  • 下面我們展開(kāi)講解目標(biāo)-動(dòng)作回調(diào)。

    2.目標(biāo)-動(dòng)作回調(diào)

    目標(biāo):接收事件反饋的對(duì)象。比如開(kāi)關(guān)要反饋?zhàn)陨頎顟B(tài),此時(shí)接收反饋信息的對(duì)象便成為目標(biāo)。目標(biāo)對(duì)象為id類(lèi)型,因?yàn)樵谠O(shè)計(jì)開(kāi)關(guān)時(shí),并不知道開(kāi)關(guān)的使用者是什么類(lèi)型的對(duì)象。在代碼中通常用target來(lái)表示目標(biāo)對(duì)象。

    動(dòng)作:事件反饋所要觸發(fā)的方法。比如開(kāi)關(guān)要反饋給我狀態(tài)改變的信息,在代碼中的具體表現(xiàn)形式為,通過(guò)調(diào)用我的某個(gè)方法來(lái)進(jìn)行告知。動(dòng)作對(duì)象為SEL類(lèi)型。

    SEL類(lèi)型是OC語(yǔ)言為存儲(chǔ)方法名創(chuàng)造的變量類(lèi)型。同時(shí)還創(chuàng)造了一個(gè)運(yùn)算符,用于把一個(gè)方法名轉(zhuǎn)換成一個(gè)SEL值。

    SEL test = @selector(方法名);

    在編程中,如果我們想使用開(kāi)關(guān),并且要根據(jù)開(kāi)關(guān)狀態(tài)的反饋?zhàn)龀霾煌奶幚?#xff0c;那么我們就需要設(shè)置開(kāi)關(guān)的反饋目標(biāo)和反饋動(dòng)作。

    能夠設(shè)置反饋目標(biāo)和反饋動(dòng)作的組件我們稱(chēng)為具有目標(biāo)動(dòng)作回調(diào)接口的組件。

    3.使用具有目標(biāo)動(dòng)作回調(diào)接口的組件

    在真實(shí)情況下,具有目標(biāo)動(dòng)作接口的組件都是復(fù)雜類(lèi)組件。所以在本章講解中,使用虛擬的組件來(lái)進(jìn)行OC語(yǔ)法上的學(xué)習(xí)。

    首先我們來(lái)了解兩個(gè)虛擬的組件,開(kāi)關(guān)和燈

    燈的聲明文件

    @interface Light : NSObject-(void)turnOff; // 開(kāi)燈 -(void)turnOn; // 關(guān)燈 @end

    可見(jiàn)燈的操作很簡(jiǎn)單,只有開(kāi)燈和關(guān)燈兩個(gè)方法。

    開(kāi)關(guān)的聲明文件

    typedef enum : NSUInteger {SwitchStateOff, // defaultSwitchStateOn, } SwitchState;@interface Switch : NSObject @property(nonatomic,assign,readonly)SwitchState currentState; -(void)addChangeStateTarget:(id)target Action:(SEL)action; @end

    開(kāi)關(guān)有一個(gè)只讀屬性,為當(dāng)前開(kāi)關(guān)的狀態(tài),其狀態(tài)變量為枚舉類(lèi)型

    • SwitchStateOff 表示關(guān)閉狀態(tài)
    • SwitchStateOn 表示開(kāi)啟狀態(tài)

    開(kāi)關(guān)還有一個(gè)addChangeStateTarget方法,通過(guò)該方法為這個(gè)開(kāi)關(guān)設(shè)置反饋對(duì)象和反饋動(dòng)作,以實(shí)現(xiàn)讓反饋對(duì)象收到開(kāi)關(guān)狀態(tài)的改變信息。

    下面我們假設(shè)有一個(gè)房間,房間中有一個(gè)開(kāi)關(guān)和一個(gè)燈。代碼實(shí)現(xiàn)如下:

    @interface Room : NSObject@end @interface Room ()@property(nonatomic,strong) Light * aLight; @property(nonatomic,strong) Switch * aSwitch; -(void)changeState:(Switch *)s; @end @implementation Room - (instancetype)init { self = [super init]; if (self) { self.aLight = [[Light alloc] init]; self.aSwitch = [[Switch alloc] init]; //設(shè)置反饋對(duì)象和反饋方法 [self.aSwitch addChangeStateTarget:self Action:@selector(changeState:)]; } return self; } -(void)changeState:(Switch *)s { if (self.aSwitch.currentState == SwitchStateOff) { [self.light turnOn]; } else { [self.light turnOff]; } } @end

    上段代碼中我們依次做了如下事情

    • 創(chuàng)建了一個(gè)Room類(lèi)的延展
    • 在延展中聲明了燈和開(kāi)關(guān)的屬性
    • 在初始化方法中為組件分配內(nèi)存
    • 在初始化方法中設(shè)置組件反饋的目標(biāo)和反饋動(dòng)作
    • 實(shí)現(xiàn)反饋方法中的具體處理邏輯

    這樣當(dāng)代碼開(kāi)始運(yùn)行,開(kāi)關(guān)狀態(tài)被用戶(hù)改變之后,燈的狀態(tài)也會(huì)隨之改變。當(dāng)然,這段代碼是虛擬的。在之后章節(jié)中我們會(huì)接觸到可以真正運(yùn)行的代碼。還需要同學(xué)們努力學(xué)習(xí)。

    轉(zhuǎn)載于:https://www.cnblogs.com/lqios/p/4272019.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的[objective-c] 04 - 消息机制 回调 目标-动作回调的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。