類別(category)與擴(kuò)展(extension)

類簇(cluster):

由于OC并沒有提供抽象類的語法支持,而在實際項目的開發(fā)中,總有需要抽象類的時候,此時就會選擇定義給一個父類,并以該父類派生多個子類,其他程序使用這些類時,總是面向父類編程,當(dāng)程序調(diào)用父類的初始化方法,靜態(tài)方法來返回對象時,實際上返回的是子類的實例。這系類的類被稱為一個類簇,這個父類也就模擬了抽象類的功能。

類別只能定義方法,是方法的模塊化管理。

1.通過類別為指定類添加新方法之后,這個新方法會影響到這個類的所有子類,每個子類都會獲得類別擴(kuò)展的方法

2.可根據(jù)需要為一個類定義多個類別,不同的類別都可對原有的類增加方法定義

定義類別的語法與定義類的語法存在如下差異:

定義類是使用的類名必須是該項目中沒有的類,而定義類別時使用的類名必須是是已有的類。

定義類別時必須使用圓括號來包含類別名

類別中通常指定義方法

用法:

1.對類進(jìn)行模塊化設(shè)計

將一個龐大的類分成幾個小類文件

2.調(diào)用私有方法

若一個方法只在實現(xiàn)部分定義,可在main()中加入聲明。

@interface 類名 (擴(kuò)展)

//聲明的方法

@end

:@interface FKItem (fk)

-(double) calDiscount:(double)discount;

@end

3.實現(xiàn)非正式協(xié)議

6.3.4 擴(kuò)展(extension)

相當(dāng)于匿名類別

@interface 已有類()

{

實例變量

}

//方法定義

...

@end

定義類的擴(kuò)展時,可以額外增加實例變量,也可以使用@property @synthesize 來合成setter.getter方法,但定義類的列表時,則不允許額外定義實例變量。

擴(kuò)展是當(dāng)類實現(xiàn)的時候,不僅要實現(xiàn)本身定義的部分,還要實現(xiàn)擴(kuò)展的部分才能夠運行。類似與接口的作用。】在目標(biāo)類的實現(xiàn)部分需要導(dǎo)入擴(kuò)展的.h文件

非雖然OC編譯器并不強(qiáng)制遵守非正式協(xié)議的類必須實現(xiàn)該現(xiàn)該協(xié)議中所有的方法,但如果該類沒有實現(xiàn)非正式協(xié)議中的某個方法,那么程序運行時如果調(diào)用該方法,就會引發(fā)unrecognized selector的錯誤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容