類簇(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的錯誤。