iOS開發(fā)基礎:類別(Category)與類擴展 (Extension)

一、類別(Categroy)

再將類別之前陈瘦,先介紹一下為什么要使用類別幌甘。
在開發(fā)大型項目中,企業(yè)級開發(fā)中多人同時維護同一個類痊项,此時程序員A因為某項需求只想給當前類添加一個方法锅风,那該怎么辦呢?
當然最簡單粗暴的方式是把newMethod添加到currentClass中鞍泉,然后直接實現(xiàn)該方法就OK了皱埠。
但考慮到OC是單繼承的,子類可以擁有父類的方法和屬性咖驮。而這個方法只有這個類需要边器,而它的子類不需要训枢。那么就可以用類別
還有,如果你覺得系統(tǒng)提供的類太過局限忘巧,不能達到你的要求恒界,你還想實現(xiàn)別的功能,但是你還不能修改系統(tǒng)提供的方法砚嘴,這個時候十酣,你就可以發(fā)揮OC動態(tài)語言的特性,添加一個類別
蘋果為了解決這個問題际长,就引入了分類(Category)的概念耸采。

Category的注意點:

  • Category的小括號內一定要有名字;故Class Extension亦被稱之為匿名分類;
#import
@interface 類名(分類名字)
/* 方法聲明*/
@end
@implement 類名(分類名字)
/*方法實現(xiàn)*/
@end
  • Category的方法不一定非要在@implement中實現(xiàn),也可以在其他位置中實現(xiàn),但是當調用Category的方法時,依據(jù)繼承樹沒有找到該方法的實現(xiàn),程序則會崩潰;并且,Category的方法優(yōu)先級較高,可以覆蓋原類的方法;
  • Category的方法中,不可以調用super方法;
  • 在實際開發(fā)中要注意的是,Category 方法可能會覆蓋于同一個類class 的其它 category 中的方法。但也可能被覆蓋也颤,因為不法預知他們的加載優(yōu)先順序洋幻,出現(xiàn)這種情況通常會在編譯時出錯。如果在一個開發(fā)的SDK中使用了類別翅娶, 就最好保證類別名不同于使用者的類別名以及類別方法也不同于使用者的類別方法名文留, 通常通過加前綴來做到。
  • 分類中的可以寫@property, 但不會生成setter/getter方法, 也不會生成實現(xiàn)以及私有的成員變量(編譯時會報警告),但是可以使用@dynamic(即運行時Runtime)來彌補這種不足.

二竭沫、類擴展(Class Extension)

Extension是Category的一個特例燥翅。類擴展與分類相比只少了分類的名稱,所以稱之為“匿名分類”蜕提。其實開發(fā)當中森书,我們幾乎天天在使用。對于有些人來說像是最熟悉的陌生人谎势。

  • 作用:
    • 能為某個類添加成員變量,屬性,方法;
    • 一般的類擴展寫到.m文件中;
    • 一般的私有屬性寫到類擴展中
#import
@interface myClass()
{
     // 成員變量
}
// 屬性
// 方法
@end
@implement
@end

Category和Extension的區(qū)別

  • Category的小括號中有名字,而Extension沒有;
  • Category只能擴充方法,不能擴充成員變量和屬性;
  • 如果Category聲明了一個屬性,那么Category只會生成這個屬性的set,get方法的聲明,也就不是會實現(xiàn).
  • 類擴展不能像類別那樣擁有獨立的實現(xiàn)部分(@implementation部分)凛膏,也就是說,類擴展所聲明的方法必須依托對應類的實現(xiàn)部分來實現(xiàn)脏榆。
  • 定義在 .m 文件中的類擴展方法為私有的猖毫,定義在 .h 文件(頭文件)中的類擴展方法為公有的。類擴展是在 .m 文件中聲明私有方法的非常好的方式须喂。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末吁断,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坞生,更是在濱河造成了極大的恐慌仔役,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件是己,死亡現(xiàn)場離奇詭異又兵,居然都是意外死亡,警方通過查閱死者的電腦和手機卒废,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門寒波,熙熙樓的掌柜王于貴愁眉苦臉地迎上來板壮,“玉大人衡创,你說我怎么就攤上這事『;澹” “怎么了级野?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵页屠,是天一觀的道長。 經(jīng)常有香客問我蓖柔,道長辰企,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任况鸣,我火速辦了婚禮牢贸,結果婚禮上,老公的妹妹穿的比我還像新娘镐捧。我一直安慰自己潜索,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布懂酱。 她就那樣靜靜地躺著竹习,像睡著了一般。 火紅的嫁衣襯著肌膚如雪列牺。 梳的紋絲不亂的頭發(fā)上整陌,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音瞎领,去河邊找鬼泌辫。 笑死,一個胖子當著我的面吹牛九默,可吹牛的內容都是我干的震放。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荤西,長吁一口氣:“原來是場噩夢啊……” “哼澜搅!你這毒婦竟也來了?” 一聲冷哼從身側響起邪锌,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勉躺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后觅丰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饵溅,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年妇萄,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜕企。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咬荷。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轻掩,靈堂內的尸體忽然破棺而出幸乒,到底是詐尸還是另有隱情,我是刑警寧澤唇牧,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布罕扎,位于F島的核電站,受9級特大地震影響丐重,放射性物質發(fā)生泄漏腔召。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一扮惦、第九天 我趴在偏房一處隱蔽的房頂上張望臀蛛。 院中可真熱鬧,春花似錦崖蜜、人聲如沸浊仆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氧卧。三九已至,卻和暖如春氏堤,著一層夾襖步出監(jiān)牢的瞬間沙绝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工鼠锈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留闪檬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓购笆,卻偏偏與公主長得像粗悯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子同欠,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容