iOS學(xué)習(xí)基礎(chǔ) 設(shè)計模式詳解
iOS學(xué)習(xí)基礎(chǔ) 設(shè)計模式詳解是本文要介紹的內(nèi)容,主要介紹在iOS中有一些基本的設(shè)計模式,我們先來看內(nèi)容。
delegation
protocol
model-vew-controller
target-action
notification
declared properties
下面分別介紹一下各個設(shè)計模式的用途。
Delegation
這是Apple的權(quán)威解釋。
delegation,委托模式(另外有個常用的proxy模式,二者的區(qū)別是代理模式一般要更嚴(yán)格,實現(xiàn)相同的接口,委托只是引用被委托對象),是簡單的強(qiáng)大的模式,可讓一個對象扮演另外對象的行為。委托對象保持到另外對象的引用,并在適當(dāng)?shù)臅r候發(fā)消息給另外對象。委托對象可以在發(fā)送消息的時候做一些額外的事情。
在cocoa框架中的委托模式,委托對象往往是框架中的對象,被委托對象是自定義的controller對象。委托對象保持一個到被委托對象的弱引用。
在該文檔中所舉的例子是mac下開發(fā)的示例。
這里被委托對象是NSWindow類的一個實例,該類聲明了協(xié)議(protocol),其中有個方法是windowShouldClose,當(dāng)用戶點擊窗口的關(guān)閉按鈕的時候,窗口對象將發(fā)送windowShouldClose消息給代理對象(windowDelegate),詢問是否確認(rèn)關(guān)閉窗口。代理對象返回一個bool值,因此控制了窗口對象的行為。
在iOS中也有類似的示例,在創(chuàng)建的項目中,classes目錄中會有xxAppDelegate,這就是委托類。在該委托類實例中,引用了UIWindow和Controller。可以類似上面mac示例控制被引用對象的行為。
Protocol
可以認(rèn)為是java中的接口(interface)。在iOS中有兩種protocol:
正式的protocol:通過@interface聲明,要求子類實現(xiàn)方法,可以強(qiáng)制實現(xiàn)(@required)或者可選(@optional),正式的protocol是對objc語言的擴(kuò)展;
非正式的protocol是NSObject的一個category,category是objc語言的一個特性,可以讓你為一個類增加方法而不需要實現(xiàn)子類。非正式protocol實現(xiàn)方法是可選的。在可選的protocol方法未引入objc 2.0以前,非正式的protocol是在foundation和appkit類中實現(xiàn)委托的基本方式
Model-View-Controller
MVC設(shè)計模式大家應(yīng)該很熟悉了,不多說了。
Target-Action
target-action是個設(shè)計模式。對象保持必要的信息,當(dāng)事件發(fā)生的時候發(fā)送消息給其他對象。所保持的信息有兩部分?jǐn)?shù)據(jù)組成:
action selector,定義要調(diào)用的方法名稱標(biāo)識;
target,接收消息的對象。
當(dāng)被稱作action message的事件發(fā)生,將向target發(fā)送action selector定義的方法消息。
target-action模式一般用于自定義的controller按照應(yīng)用規(guī)范定義的方式處理action message。
Notification
一個notification,即一個通知,是一個消息,是用于通知一到多個觀察者對象程序當(dāng)前有一個事件發(fā)生。這里,接收通知的一方叫觀察者,observer。實際上是觀察者模式。
這里,發(fā)送通知的對象,并不知道誰會收到這個通知。這樣通知者和觀察者之間松散耦合。
Declared property
字面意思是聲明的屬性。比如:
- @property (<#attributes#>) <#type#> <#name#>;
是增強(qiáng)objc語法,簡化編寫代碼的“語法糖”性質(zhì)的東西。
小結(jié):iOS學(xué)習(xí)基礎(chǔ) 設(shè)計模式詳解的內(nèi)容介紹完了,希望本文對你有所幫助!