在Objective-C中讹堤,給一個(gè)類(lèi)擴(kuò)展一個(gè)其它方法,有兩種實(shí)現(xiàn)方式:類(lèi)別和繼承。
1.繼承Inherit
這個(gè)是面向?qū)ο笳Z(yǔ)言都有的一個(gè)特性固惯,子類(lèi)會(huì)繼承父類(lèi)的方法和屬性。
對(duì)于以下情況缴守,無(wú)法使用類(lèi)別葬毫,必須使用繼承镇辉。
1)新擴(kuò)展的方法與原方法同名,但是還需要使用父類(lèi)的實(shí)現(xiàn)贴捡。因?yàn)槭褂妙?lèi)別忽肛,會(huì)覆蓋原類(lèi)的實(shí)現(xiàn),無(wú)法訪問(wèn)到原來(lái)的方法烂斋。
2)擴(kuò)展類(lèi)的屬性屹逛,這個(gè)類(lèi)別無(wú)法做到。
示例代碼:
//? ViewControllerEx.h
@interface ViewControllerEx : UIViewController
//自己需要添加的方法
@end
// ViewControllerEx.m
@implementation ViewControllerEx
// 方法的實(shí)現(xiàn)
@end
2.類(lèi)別category
這是Objective-C語(yǔ)言的一個(gè)特性汛骂,可以在不改變類(lèi)名和原來(lái)類(lèi)的實(shí)現(xiàn)的前提下罕模,實(shí)現(xiàn)對(duì)類(lèi)的方法擴(kuò)展。
以下兩種方式最后使用類(lèi)別帘瞭。
1)針對(duì)系統(tǒng)提供的一些類(lèi)淑掌,例如:NSString,NSArray,NSNumber等類(lèi),系統(tǒng)本身不提倡使用繼承去擴(kuò)展方法图张,因?yàn)檫@些類(lèi)內(nèi)部實(shí)現(xiàn)對(duì)繼承有所限制锋拖,所以最后使用類(lèi)別來(lái)進(jìn)行方法擴(kuò)展。
2)類(lèi)別支持開(kāi)發(fā)人員針對(duì)自己構(gòu)建的類(lèi)祸轮,把相關(guān)的方法分組到多個(gè)單獨(dú)的文件中兽埃,對(duì)于大型而復(fù)雜的類(lèi),這有助于提高可維護(hù)性适袜,并簡(jiǎn)化單個(gè)源文件的管理柄错。
示例代碼:
// 這里有一個(gè)約定俗成的規(guī)定,類(lèi)別文件命名時(shí)苦酱,是原類(lèi)名+擴(kuò)展標(biāo)識(shí)名
//? NSString+ex.h
@interface NSString (ex)
// 擴(kuò)展的類(lèi)回別方法
@end
//? NSString+ex.m
@implementation NSString (ex)
// 方法的實(shí)現(xiàn)
@end