iOS categoryde用法以及extension的區(qū)別

iOS中category即:類別 ;extension 為擴(kuò)張

一.category?

類別是一種為現(xiàn)有的類添加新方法的方式棠笑。

利用Objective-C的動態(tài)運(yùn)行時分配機(jī)制销部,Category提供了一種比繼承(inheritance)更為簡潔的方法來對class進(jìn)行擴(kuò)展缴饭,無需創(chuàng)建對象類的子類就能為現(xiàn)有的類添加新方法,可以為任何已經(jīng)存在的class添加方法繁调,包括那些沒有源代碼的類(如某些框架類)萨蚕。

1.類別的局限:(1)無法向類別中添加新的實(shí)例變量,類別沒有位置容納實(shí)例變量蹄胰。如果一定要添加實(shí)例變量岳遥,可以采用runtime 庫objc_setAssociatedObject / objc_getAssociatedObject 函數(shù)來解決。objc_setAssociatedObject 就是將一個對象跟另一個對象進(jìn)行關(guān)聯(lián)裕寨,并用一個key來標(biāo)示浩蓉,objc_getAssociatedObject 就是用這個key來拿到與receiver相關(guān)聯(lián)的一個對象。

注意:必須使用@dynamic來讓編譯器知道我們自己實(shí)現(xiàn)setter/getter方法(如果對于@dynamic有疑問宾袜,請參見:http://stackoverflow.com/questions/1160498/synthesize-vs-dynamic-what-are-the-differences)

? ? ? ? ?不能使用@synthesize(也不能@dynamic 和@synthesize都不寫捻艳,什么都不寫在最新的xcode里是默認(rèn)@synthesize),@synthesize會自動生成成員變量庆猫,并自動生成setter/getter方法认轨。

? ? ? ? ?最后,objc_setAssociatedObject 的關(guān)聯(lián)的policy 可以根據(jù)自己的需求使用月培,這個例子使用 OBJC_ASSOCIATION_RETAIN_NONATOMIC來標(biāo)示一個strong reference來指向被關(guān)聯(lián)的對象嘁字。

(2)名稱沖突,即當(dāng)類別中的方法名與原始類中的名稱相同的時候杉畜,類別具有更高的優(yōu)先級纪蜒。類別的方法將完全取代原始方法而無法再使用原始方法。

2.類別的作用

類別的作用主要有三個:

(1)可以將類的實(shí)現(xiàn)分散到多個不同的文件或者不同的框架中此叠,方便代碼的管理纯续。也可以對框架提供類的擴(kuò)展(沒有源碼,不能修改)拌蜘。

?(2)創(chuàng)建對私有方法的前向引用:如果其他類中的方法未實(shí)現(xiàn)杆烁,在你訪問其他類的私有方法時編譯器報錯這時使用類別牙丽,在類別中聲明這些方法(不必提供方法實(shí)現(xiàn))简卧,編譯器就不會再產(chǎn)生警告

?(3)向?qū)ο筇砑臃钦絽f(xié)議:創(chuàng)建一個NSObject的類別稱為“創(chuàng)建一個非正式協(xié)議”,因?yàn)榭梢宰鳛槿魏晤惖奈袑ο笫褂谩?br>

二.Extension 的使用

? ?首先還是需要創(chuàng)建相關(guān)類的擴(kuò)展烤芦,即方法的聲明举娩,然后在需要擴(kuò)張的類中引入頭文件,然后實(shí)現(xiàn)聲明的方法。

三.Category 與Extension 的區(qū)別

1.形式上看:extension 是匿名的category

2.extension中聲明的方法需要在mainimplementation中實(shí)現(xiàn)铜涉,而category 不做強(qiáng)制要求

3.extension 可以添加屬性智玻、成員變量,而category 一般不可以芙代。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吊奢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纹烹,更是在濱河造成了極大的恐慌页滚,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铺呵,死亡現(xiàn)場離奇詭異裹驰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)片挂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門幻林,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人音念,你說我怎么就攤上這事沪饺。” “怎么了闷愤?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵随闽,是天一觀的道長。 經(jīng)常有香客問我肝谭,道長掘宪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任攘烛,我火速辦了婚禮魏滚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坟漱。我一直安慰自己鼠次,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布芋齿。 她就那樣靜靜地躺著腥寇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪觅捆。 梳的紋絲不亂的頭發(fā)上赦役,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音栅炒,去河邊找鬼掂摔。 笑死术羔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乙漓。 我是一名探鬼主播级历,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叭披!你這毒婦竟也來了寥殖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤涩蜘,失蹤者是張志新(化名)和其女友劉穎扛禽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皱坛,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡编曼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剩辟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掐场。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贩猎,靈堂內(nèi)的尸體忽然破棺而出熊户,到底是詐尸還是另有隱情,我是刑警寧澤吭服,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布嚷堡,位于F島的核電站,受9級特大地震影響艇棕,放射性物質(zhì)發(fā)生泄漏蝌戒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一沼琉、第九天 我趴在偏房一處隱蔽的房頂上張望北苟。 院中可真熱鬧,春花似錦打瘪、人聲如沸友鼻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彩扔。三九已至,卻和暖如春僻爽,著一層夾襖步出監(jiān)牢的瞬間虫碉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工进泼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔗衡,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓乳绕,卻偏偏與公主長得像绞惦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洋措,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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