【iOS】類別和類拓展

類別(Category)和類拓展(Extension)是Objective-C中獨有的用于拓展類對象的機制瓮下。

類別(Category)在不改變原來代碼的情況下,向一個已經(jīng)存在的類中添加新的方法该编,只需要知道這個類的公開接口,不需要源碼。類別添加的新方法有更高的優(yōu)先級芍瑞,會覆蓋類中同名的已有方法。類別只能為已存在的類添加新的方法增拥,不能添加新的屬性(注1)啄巧。

類別相對于繼承

繼承更加自由,可以添加新屬性和新方法掌栅。類別的優(yōu)點是不需要新創(chuàng)建一個類秩仆,而是正系統(tǒng)已有的類上直接拓展和改寫,不需要更改類就能添加并使用拓展方法猾封。另一個優(yōu)點是類別可以實現(xiàn)拓展模塊的隔離澄耍,只有在引用本類時才能看到拓展的方法。

類別相對于類拓展

類拓展可以添加屬性晌缘,在類拓展中添加的方法必須實現(xiàn)齐莲。類拓展可以看作一個私有的匿名類別。類拓展的定義在.m文件頭部磷箕,添加的屬性和方法都沒有暴露在.h頭文件选酗,通常情況下只能在類內(nèi)部使用,一定程度上實現(xiàn)了私有機制岳枷。

類別的作用和局限性

1芒填、可以將類的實現(xiàn)分散到多個文件或者多個框架中

2、可以創(chuàng)建對私有方法的前向引用(注2)

3空繁、可以向?qū)ο筇砑臃钦絽f(xié)議

4殿衰、類別只能向原類中添加新的方法,不能修改或者刪除盛泡,也不能添加新的屬性

5闷祥、類別添加的新方法全局有效且優(yōu)先級最高,與原方法重名會進行覆蓋傲诵。

類拓展(Extension)常用于在.m文件的頭部進行頭文件私有屬性變量補充凯砍,將不想暴露給外部的一些變量定義在類拓展中。


注1:向類別中添加屬性會失敗掰吕,從設(shè)計上考慮可以認(rèn)為是為了保持類別的單純特性果覆,和繼承區(qū)別開,防止類別污染被拓展的類殖熟。根本原因是無法在類別中獲取屬性加下劃線的實例變量名局待,導(dǎo)致無法手動實現(xiàn)存取方法。在類別中定義屬性后能在類的屬性列表中找到,但編譯器只聲明了存取方法钳榨,沒有實現(xiàn)舰罚。對于一個不能訪問的屬性,相當(dāng)于不存在薛耻。利用運行時的機制营罢,開發(fā)者可以強行實現(xiàn)類別中屬性的存取方法,實現(xiàn)在類別中拓展屬性饼齿。

注2:Cocoa沒有任何真正的私有方法饲漾。只要知道對象支持的某個方法的名稱,即使該對象所在的類沒有該方法的聲明缕溉,也可以通過新建一個該類的類別考传,在.h文件中聲明,就可以進行調(diào)用证鸥。這就是私有方法的前向引用僚楞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市枉层,隨后出現(xiàn)的幾起案子泉褐,更是在濱河造成了極大的恐慌,老刑警劉巖鸟蜡,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膜赃,死亡現(xiàn)場離奇詭異,居然都是意外死亡揉忘,警方通過查閱死者的電腦和手機财剖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來癌淮,“玉大人,你說我怎么就攤上這事沦补∪樾睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵夕膀,是天一觀的道長虚倒。 經(jīng)常有香客問我,道長产舞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蛛倦,結(jié)果婚禮上晾匠,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好哈蝇,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布棺妓。 她就那樣靜靜地躺著,像睡著了一般炮赦。 火紅的嫁衣襯著肌膚如雪怜跑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天吠勘,我揣著相機與錄音性芬,去河邊找鬼。 笑死剧防,一個胖子當(dāng)著我的面吹牛植锉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诵姜,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼汽煮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棚唆?” 一聲冷哼從身側(cè)響起暇赤,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宵凌,沒想到半個月后鞋囊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡瞎惫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年溜腐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓜喇。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡挺益,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乘寒,到底是詐尸還是另有隱情望众,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布伞辛,位于F島的核電站烂翰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚤氏。R本人自食惡果不足惜甘耿,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竿滨。 院中可真熱鬧佳恬,春花似錦捏境、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至头谜,卻和暖如春骏掀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柱告。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工截驮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人际度。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓葵袭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乖菱。 傳聞我的和親對象是個殘疾皇子坡锡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容