Delegates and Data Sources

代理是一個(gè)對象页藻,用于代替另一個(gè)對象對程序中的事件做出響應(yīng),或與另一個(gè)對象協(xié)作完成事件的響應(yīng)植兰;委托對象通常是響應(yīng)者對象:NSResponderUIResponder的子類份帐。
cocoa框架中的UITextField和UITableView都使用了委托機(jī)制,這種機(jī)制可以使代理對象根據(jù)變化協(xié)調(diào)UI和狀態(tài)的改變楣导;還可以在不使用繼承的情況下改變另一個(gè)對象的行為废境。

委托模式的工作原理

委托模式的機(jī)制

委托類需要有一個(gè)叫做delegate的屬性,同時(shí)筒繁,在Protocol中聲明一些代理方法噩凹,代理實(shí)現(xiàn)其中需要的方法;

委托消息的形式

代理方法通常的形式為:

  • 帶返回值的方法毡咏,如返回BOOL值驮宴,可能影響委托對象的執(zhí)行邏輯;
  • 不帶返回值的呕缭,用于委托對象通知代理對象事件的處理狀態(tài)堵泽,以will/should或did/has開頭表示即將或已經(jīng)完成某個(gè)動作,這類方法也可以影響委托對象的行為恢总。

委托機(jī)制和Application Frameworks

在Cocoa和Cocoa Touch程序中迎罗,委托對象通常是一個(gè)響應(yīng)者對象,代理通常是自定義的對象离熏〖亚框架中包含很多委托對象:
NSApplicationNSBrowser滋戳、NSControl钻蔑、NSDrawerNSFontManager奸鸯、NSFontPanel咪笑、NSMatrixNSOutlineView娄涩、NSSplitView窗怒、NSTableViewNSTabView蓄拣、NSText扬虚、NSTextFieldNSTextView球恤、NSWindow

數(shù)據(jù)源Data Sources

數(shù)據(jù)源是數(shù)據(jù)代理辜昵,用于數(shù)據(jù)控制,而不是用于處理交互咽斧。一般由view持有堪置,用于為view提供其所需要的數(shù)據(jù)躬存;處理view中編輯的數(shù)據(jù)。數(shù)據(jù)源負(fù)責(zé)數(shù)據(jù)的持有舀锨,view僅在需要持有其當(dāng)前展示需要的數(shù)據(jù)岭洲。

為自定義類實(shí)現(xiàn)代理

僅需以下幾步:

  • 聲明delegate的訪問方法
- (id)delegate;
- (void)setDelegate:(id)newDelegate;
  • 實(shí)現(xiàn)訪問方法,避免循環(huán)引用
- (id)delegate {
    return delegate;
}

- (void)setDelegate:(id)newDelegate {
    delegate = newDelegate;
}
  • 聲明協(xié)議方法
  • 在調(diào)用委托方法時(shí)坎匿,需要確保代理實(shí)現(xiàn)了方法:respondsToSelector:
- (void)someMethod {
    if ( [delegate respondsToSelector:@selector(operationShouldProceed)] ) {
        if ( [delegate operationShouldProceed] ) {
            // do something appropriate
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盾剩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子替蔬,更是在濱河造成了極大的恐慌彪腔,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件进栽,死亡現(xiàn)場離奇詭異,居然都是意外死亡恭垦,警方通過查閱死者的電腦和手機(jī)快毛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來番挺,“玉大人唠帝,你說我怎么就攤上這事⌒兀” “怎么了襟衰?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粪摘。 經(jīng)常有香客問我瀑晒,道長,這世上最難降的妖魔是什么徘意? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任苔悦,我火速辦了婚禮,結(jié)果婚禮上椎咧,老公的妹妹穿的比我還像新娘玖详。我一直安慰自己,他們只是感情好勤讽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布蟋座。 她就那樣靜靜地躺著,像睡著了一般脚牍。 火紅的嫁衣襯著肌膚如雪向臀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天莫矗,我揣著相機(jī)與錄音飒硅,去河邊找鬼砂缩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛三娩,可吹牛的內(nèi)容都是我干的庵芭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼雀监,長吁一口氣:“原來是場噩夢啊……” “哼双吆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起会前,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤好乐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瓦宜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔚万,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年临庇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了反璃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡假夺,死狀恐怖淮蜈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情已卷,我是刑警寧澤梧田,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站侧蘸,受9級特大地震影響裁眯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闺魏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一未状、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧析桥,春花似錦司草、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娩怎,卻和暖如春搔课,著一層夾襖步出監(jiān)牢的瞬間卖怜,已是汗流浹背葛虐。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人档泽。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓故河,卻偏偏與公主長得像乞娄,于是被迫代替她去往敵國和親钾怔。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容