2 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
控制反轉(zhuǎn)(IoC): 不是你從main()開(kāi)始寫(xiě)代碼然后調(diào)用lib, 而是framework調(diào)用你寫(xiě)的代碼. 作為進(jìn)程入口的main()仍然存在, 但是是在框架里定義的, 不用你來(lái)寫(xiě).
委托, 就是"把任務(wù)轉(zhuǎn)交給別的class, 由別的class承擔(dān)". 一個(gè)framework不能把所有行為寫(xiě)死, 總有些行為要由app開(kāi)發(fā)者來(lái)定義. 你定義一個(gè)實(shí)現(xiàn)了特定protocol的class然后傳進(jìn)去, framework就會(huì)在需要的時(shí)候("app啟動(dòng)了" "收到Notification了")調(diào)用你的AppDelegate來(lái)處理.

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
說(shuō)起來(lái)有點(diǎn)長(zhǎng)。
先說(shuō)Delegate,這是一個(gè)OO中的概念,調(diào)用一個(gè)對(duì)象的成員函數(shù)在OO中的術(shù)語(yǔ)是給這個(gè)對(duì)象發(fā)送消息,對(duì)象接收到一個(gè)消息時(shí)可以選擇自己處理掉,或者將這個(gè)消息轉(zhuǎn)發(fā)給另外一個(gè)對(duì)象,轉(zhuǎn)發(fā)到的那個(gè)對(duì)象就被稱(chēng)之為delegate。
Cocoa程序在啟動(dòng)的時(shí)候,runtime會(huì)給每個(gè)app創(chuàng)建一個(gè)NSApplication對(duì)象實(shí)例,NSApplication對(duì)象會(huì)接收到Cocoa框架發(fā)送來(lái)的一些消息,比如告訴它程序已經(jīng)啟動(dòng)或者用戶(hù)想要退出等,但NSApplication對(duì)象并不親自處理這個(gè)消息,因?yàn)槊總€(gè)程序擁有的NSApplication對(duì)象都是一樣的,但每個(gè)程序?qū)τ谶@些消息的處理方式卻不一樣,所以NSApplication對(duì)象讓你指定一個(gè)Delegate對(duì)象來(lái)處理這些消息,以得到你想要的結(jié)果。
AppDelegate.swift中定義了一個(gè)class,這個(gè)class的實(shí)例對(duì)象就是這個(gè)程序中NSApplication的delegate。這個(gè)實(shí)例對(duì)象的創(chuàng)建是由Cocoa框架做的。
當(dāng)然你可以在一個(gè)程序里建立不止一個(gè)NSApplicationDelegate的子類(lèi),也可以創(chuàng)建不止一個(gè)NSApplicationDelegate對(duì)象,但你的App里定義了一個(gè)xib文件,這個(gè)xib文件中指定了Cocoa到底應(yīng)該創(chuàng)建哪個(gè)類(lèi)的實(shí)例作為全局NSApplication對(duì)象的delegate。
- 2 回答
- 0 關(guān)注
- 1285 瀏覽
添加回答
舉報(bào)