天天看點

OC中的類别Category-協定Protocol-…

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

類别(category)——通過使用類别,我們可以動态地為現有的類添加新方法,而且可以将類定義子產品化地分不到多個相關檔案中。通常隻在類别中定義方法。 

例如,考慮為person增加一個類别,則接口部分代碼如下

該類别的實作部分如下

我們知道,如果一個函數在.h檔案中無聲明而在.m檔案中定義它的實作,那麼該方法就是私有方法,隻能在本類的檔案中使用。  若我們在類别的接口部分聲明這個方法,那麼我們就可以實作對該私有方法的通路。

—————————————————————————————————————————————————————————————————————————————

擴充(extension)

擴充與類别相似,擴充相當于匿名類别,即沒有類别名的類别

在用法上,類别通常都都有單獨的.h和.m檔案。擴充則是臨時的對某個類進行擴充,類的實作部分同時實作類接口部分定義的方法和擴充中定義的方法。定義類的擴充時,可以增加額外的執行個體變量,也可使用@property和@synthesize關鍵字,但在定義類的額外清單時不允許額外定義執行個體變量。

有類名為vehicle,隻有name屬性沒有定義方法。對其進行擴充

為原來的vehicle類增加color屬性和drive:方法,是以在vehicle.m實作檔案裡面要實作vehicle.h裡聲明的方法及這個drive:方法。

在實際使用中,通用的做法是省略掉vehicle_ext.h檔案,而是将其中的内容直接添加在vehicle.m檔案@implementation前部即可。

協定(protocol)

以nsobject為基礎,為nsoject建立類别,建立類别時指定該類新增的方法,既可以實作非正式協定。而oc中對于實作非正式協定的類而言,oc并不強制實作該協定中的所有方法 。

正式協定使用@protocol關鍵字定義

協定是支援多繼承的。在oc2.0标準中新增了@required\@optional兩個關鍵字,聲明方式是必須是必須實作還是可選的,預設為@required.

遵守協定的文法如下

使用協定來定義變量,那麼這些變量隻能調用該協定中聲明的方法,否則編譯器會提示錯誤。

使用協定來定義變量的兩種文法

協定展現的是一種規範,定義協定的類可以把協定定義的方法委托(delegate)給實作協定的類,這樣可以讓類具有更好的通用性,具體的動作交給協定的實作類來完成。在大量的應用程式開發中大量依賴委托這個概念。

轉自:http://blog.csdn.net/qq_31810357

繼續閱讀