在實(shí)際的開發(fā)過程中,對于界面相似度很高的情況下姐刁,使用繼承可以節(jié)省很多代碼設(shè)置,涉及到的額外的東西烦味,可以再子類中重寫父類中的方法,或者在子類中增加新的子類方法即可拐叉,可以使代碼非常的簡潔,便于后期維護(hù)凤瘦。
在OC中,給一個(gè)類拓展一個(gè)新的方法案铺,有兩種實(shí)現(xiàn)途徑:類別、繼承控汉;
繼承
繼承是面向?qū)ο蟮恼Z言都有的特性笔诵,子類會(huì)繼承父類的方法和屬性以及成員變量姑子。但是這里的方法,指的是在父類.h文件中聲明的方法街佑。
.h文件相當(dāng)于一個(gè)對外公開的head谢翎,是因?yàn)镺C中無法導(dǎo)入.m文件沐旨,只能導(dǎo)入.h文件,所有子類需要用到父類中導(dǎo)入的頭文件的話磁携,這個(gè)頭文件需要在父類的.h文件中導(dǎo)入,子類無法調(diào)用父類.m文件聲明的變量和方法谊迄,相當(dāng)于是私有的
在繼承中需要注意的是: 重寫的這個(gè)方法在父類中執(zhí)行時(shí)闷供,會(huì)替換掉原來的方法鳞上,(就算子類中沒有調(diào)用這個(gè)新重寫的的方法,這個(gè)新的方法頁已經(jīng)被執(zhí)行了)篙议,所以子類一般只調(diào)用新添加的方法唾糯。
若某個(gè)成員變量是在.h文件中聲明的,但是不想被子類調(diào)用移怯,可以對這個(gè)成員變量使用 @private 修飾香璃。
優(yōu)點(diǎn):1舟误、抽取了重復(fù)代碼,精簡代碼嵌溢,便于優(yōu)化眯牧;2赖草、建立了類與類之間的聯(lián)系;
缺點(diǎn):耦合性太強(qiáng)
類別category
這是OC語言的一個(gè)特性秧骑,可以在不改變類名和原來類實(shí)現(xiàn)的前提下版确,實(shí)現(xiàn)對類的方法擴(kuò)展乎折。
下面兩種情況最好使用類別:
1、針對系統(tǒng)提供的一些類進(jìn)行方法擴(kuò)充的時(shí)候骂澄。
2、類別支持開發(fā)人員針對自己構(gòu)建的類酗洒,把相關(guān)的方法分組到多個(gè)單獨(dú)的文件中士修,對于大而復(fù)雜的類樱衷,有助于提高其可維護(hù)性,并簡化單個(gè)源文件的管理矩桂。
對于下面的情況沸移,無法使用類別侄榴,必須使用繼承
1、新擴(kuò)展的文件名與原方法同名癞蚕,但還是需要使用父類的方法實(shí)現(xiàn)蕊爵。如果使用類別桦山,會(huì)將原類中已經(jīng)實(shí)現(xiàn)的部分覆蓋掉醋旦,導(dǎo)致無法訪問到原來的方法;雖然繼承也會(huì)導(dǎo)致覆蓋(即:重寫)会放,但是在重寫的時(shí)候,調(diào)用父類的同名的方法咧最,但是類別不可以捂人;
2矢沿、擴(kuò)展類的屬性,這個(gè)類別無法做到捣鲸。
3论熙、OC中摄狱,子類可以擁有與父類同名的方法无午,在子類調(diào)用時(shí),有限在子類自身內(nèi)部尋找該方法宪迟,如果沒找到酣衷,將會(huì)一層一層的向上找次泽;
4、OC語言是單繼承語言意荤,在OC中啊片,幾乎所有的類都繼承于NSObject類玖像。
提示:
1、所謂的“重寫”捐寥,就是子類實(shí)現(xiàn)了父類中的某個(gè)方法笤昨,將父類中已經(jīng)實(shí)現(xiàn)的效果覆蓋掉了握恳;
2、每一個(gè)類中乡洼,都有super class指針崇裁,該指針指向自己的父類。對象中有一個(gè)isa指針寇壳,該指針指向調(diào)用該對象的類醒颖。