Category(類別)與Extensions(擴展)
一.分類(Category)
1.用途:
(1)為已經(jīng)存在的類添加方法
(2)把類的實現(xiàn)分開到多個文件
(3)聲明私有方法
(4)模擬多繼承
(5)把framework的私有方法公開
2.優(yōu)點
(1)可以減少單個文件的體積
(2)可以把不同功能組織到不同的category里
(3)可以由多個開發(fā)者共同完成一個類
(4)可以按需加載想要的Category
(5)聲明私有方法
3.特點
(1)Category只能給某個已有的類擴充方法,不能擴充成員變量
(2)Category中也可以添加屬性,只不過@property只會生成setter和getter的聲明,不會生成setter和getter的實現(xiàn)以及成員變量
(3)如果Category中的方法和類中原有方法重名,運行時會優(yōu)先調(diào)用Category中的方法,也就是說,Category中的方法會覆蓋類中的原有方法
(4) 如果多個category中存在同名的方法,運行時到底調(diào)用哪個方法由編譯器決定,最后一個參與編譯的方法被調(diào)用.
(5)Category是在運行時加載的,不是編譯時
4.調(diào)用優(yōu)先級
(1)分類(Category) > 本類 > 父類
5.注意點
(1)Category中的方法并沒有完全替換掉類中原有的重名方法,也就是說,Category附加完成之后,類的方法列表里會有兩個相同的方法
(2)category的方法被放到了新方法列表的前面,而原來類的方法被放到新方法列表的后面,這也就是我們常說的Category的方法會覆蓋原來類的同名方法,這是因為運行時在查找方法的時候是順著方法列表的順序找的,它只要一找到對應名字的方法,就會停止查找
二.Extension
1.簡介
(1)extension看起來很像一個匿名的category绰沥,但是extension和category幾乎完全是兩個東西学少。
(2)extension不但可以聲明方法喧半,還可以聲明屬性、成員變量.
(3)extension一般用于聲明私有方法渣淤,私有屬性,私有成員變量吉嫩。
2.存在形式
(1)extension只存在于一個.h文件中,或者extension只寄生于一個類的.m文件中
三.Category 與 Extension 的區(qū)別
(1)extension在編譯期決議价认,它就是類的一部分,但是category則完全不一樣率挣,它是在運行期決議的刻伊。
(2)extension一般用來隱藏類的私有信息,你必須有一個類的源碼才能為一個類添加extension,而category不需要有類的源碼椒功,我們可以給系統(tǒng)提供的類添加category捶箱。
(3)extension可以添加實例變量,而category不可以动漾。
(4)extension和category都可以添加屬性丁屎,但是category的屬性不能生成成員變量和getter、setter方法的實現(xiàn)