天天看點

OC Category(類别)

類别(Category)的基本概念

       封裝是面向對象的一個特征,OC也不例外,但是有的時候我們會碰到這樣的一種情況,封裝了一個類,不想再動它了,可是随着程式功能的增加,需要在那個類中增加一個小小的方法,這是我們就不必再在那個類中做修改或者在定義一個子類,隻需要在用到的地方随手添加一個該類的類别(Category)即可。

   注:

(1)在類别中定義的方法,會成為原始類的一部分,與其他方法的調用沒有差別。

(2)通過給父類定義類别方法,其子類也會繼承這些方法。如果子類添加類别方法,父類則不會用子類的類别方法。

類别方法的好處:

  •      @1.    對現有類進行擴充:比如,可以進行擴充Cocoa touch架構中類,你在類别中增加的方法會被子類所繼承,而且在運作時跟其他的方法沒有差別。
  •     @2.     作為子類的替代手段:不需要定義和使用一個子類,你可以通過類别直接向已有的類别中增加方法。
    •     @3.     對類中的方法進行歸類:利用category把一個龐大的類劃分為小塊來分别進行開發,進而更好的對類中的方法進行更新和維護。

      類别方法的局限性

            @1.  無法向類别中,添加新的執行個體變量,類别沒有位置來容納執行個體變量。如果想增加類的執行個體變量,隻能通過定義子類的方式。
      •      @2.   如若在類别中覆寫現有類的方法。這樣可能會引起super消息鍊的斷裂,因為類别中的方具有更高的優先級,是以,一般不要覆寫現有類中的方法

        類别的命名和用法

                 類别的命名規則:類名+擴充方法,如:NNString+Add;

                類别的接口聲明與類的定義十分相似,但是類别不繼承父類,隻需要帶有一個括号,表明該類的主要用途