天天看點

Objective-C類别(Category),分類

1,類别的目的:

1)代替子類

2)對類進行擴充

3)類方法的歸類

2,類别基本注意事項

1,為一個類建立分類,其實就是把它的實作分為幾部分;每個類别都是類的一部分;一個類可以有多個分類,但是在每一個分類中隻能為原有類增添方法,不能增添執行個體變量;對于一個不想公開源代碼的類來說,為它建立分類是很有必要的。

 2,可以為一個類寫很多的分類,但是這些分類都是原有類的一部分,其中的成員也會被子類繼承。

 3,對于分類來講,它裡面的方法,如果不需要的話,可以不去實作;分類隻能添加方法不能添加執行個體變量,分類可以重寫已有類的方法,但是一般不這麼做,需要重寫的時候一般用繼承。

 4,如果一個類多個分類中使用相同的方法名,在使用的時候編譯器也不知道要執行那個方法,是以在寫分類時候,方法名不要重名。

 5,分類中子類可以通過super關鍵字調用到父類的方法,但是分類中無法調用到被覆寫的方法。

 6,分類的限制:類别和繼承關系不能同時出現。

 7,分類中既可以定義執行個體方法也可以定義類方法

 8,分類的接口部分必須引用主檔案中的接口檔案;分類的接口檔案,必須引用對應的接口檔案;使用分類中的方法必須使用這個分類所在的頭檔案。

3,分類的用途

1)作為子子產品的範疇(分類)

如果有很多方法的,規模很大的類,把所有的實作部分都寫在一個檔案中就比較不友善。這時候可以利用分類的特性,将聯系緊密的方法作為一個範疇來進行分類類似于C中把某些函數寫在同一個檔案中一樣,這樣把類中依賴性比較高的部分歸納一起,開發會變的更加容易。

由多個範疇組成的類,就好像是給主類加上了各種選項,需要靠程式員來保證主類和各種範疇能夠作為一個整體來正常工作。

2)私有方法

定義一個不對外公開的類的分類,在分類中定義私有方法和私有的全局變量,這時候,需要用到這些方法或者變量的時候,在其它公開的類中引入私有的分類u定義即可,用這種方法來私下私有方法和私有變量。

3)類擴充

類擴充中聲明的方法必須在類的實作檔案中實作,不管是否引入了類擴充的定義,隻要在類的實作部分沒有實作對應的方法,就會出現編譯報錯。       是以可以利用這個特性,将必須要實作的私有方法放到類擴充中,這樣可以防止漏掉實作這個方法 的情況。

類擴充中聲明的執行個體變量隻能在引入了主類的接口和擴充聲明的範疇中使用。主類的實作部分也可以聲明執行個體變量,但是聲明的變量隻能在該檔案中使用,類擴充中定義的變量可以在多個分類中使用。

類擴充的注意事項:

- 所謂的擴充,其實就是為一個類添加額外的原來沒有的方法或者合成屬性;

- 擴充中,隻能擴充合成屬性和方法,不能添加字段,否則會編譯錯誤;

- 定義在 .m 檔案中的擴充為私有的,定義在 .h 檔案(頭檔案)中的擴充為公有的。類擴充是在 .m 檔案中聲明私有方法的非常好的方式。

- 類擴充中的聲明的方法與在類中聲明的方法是完全一緻的,這些方法必須在随後的代碼中實作,在編譯時會被添加到類中,而分類是在運作時進行添加的。