類别(Category)的基本概念
封裝是面向對象的一個特征,OC也不例外,但是有的時候我們會碰到這樣的一種情況,封裝了一個類,不想再動它了,可是随着程式功能的增加,需要在那個類中增加一個小小的方法,這是我們就不必再在那個類中做修改或者在定義一個子類,隻需要在用到的地方随手添加一個該類的類别(Category)即可。
注:
(1)在類别中定義的方法,會成為原始類的一部分,與其他方法的調用沒有差別。
(2)通過給父類定義類别方法,其子類也會繼承這些方法。如果子類添加類别方法,父類則不會用子類的類别方法。
類别方法的好處:
- @1. 對現有類進行擴充:比如,可以進行擴充Cocoa touch架構中類,你在類别中增加的方法會被子類所繼承,而且在運作時跟其他的方法沒有差別。
- @2. 作為子類的替代手段:不需要定義和使用一個子類,你可以通過類别直接向已有的類别中增加方法。
- @3. 對類中的方法進行歸類:利用category把一個龐大的類劃分為小塊來分别進行開發,進而更好的對類中的方法進行更新和維護。
類别方法的局限性
@1. 無法向類别中,添加新的執行個體變量,類别沒有位置來容納執行個體變量。如果想增加類的執行個體變量,隻能通過定義子類的方式。- @2. 如若在類别中覆寫現有類的方法。這樣可能會引起super消息鍊的斷裂,因為類别中的方具有更高的優先級,是以,一般不要覆寫現有類中的方法
類别的命名和用法
類别的命名規則:類名+擴充方法,如:NNString+Add;
類别的接口聲明與類的定義十分相似,但是類别不繼承父類,隻需要帶有一個括号,表明該類的主要用途
- @2. 如若在類别中覆寫現有類的方法。這樣可能會引起super消息鍊的斷裂,因為類别中的方具有更高的優先級,是以,一般不要覆寫現有類中的方法
- @3. 對類中的方法進行歸類:利用category把一個龐大的類劃分為小塊來分别進行開發,進而更好的對類中的方法進行更新和維護。