面試題:分類(lèi)和擴(kuò)展的區(qū)別

分類(lèi)(Category)

分類(lèi)的作用是動(dòng)態(tài)的(分類(lèi)是在運(yùn)行期決議的)為一個(gè)已經(jīng)存在的類(lèi)添加方法,即使你不知道這個(gè)類(lèi)的源碼。

注意

1.分類(lèi)中不能為類(lèi)添加實(shí)例變量,如果添加實(shí)例變量會(huì)直接報(bào)錯(cuò):

 Instance variables may not be placed in categories

因?yàn)樵谶\(yùn)行期,對(duì)象的內(nèi)存布局已經(jīng)確定,如果添加實(shí)例變量就會(huì)破壞類(lèi)的內(nèi)部布局,這對(duì)編譯型語(yǔ)言來(lái)說(shuō)是災(zāi)難性的。

2.分類(lèi)中可以使用屬性@property,但是只會(huì)生成setter、getter方法的聲明(不會(huì)生成實(shí)例變量以及setter、getter方法的實(shí)現(xiàn))。當(dāng)調(diào)用setter、getter方法時(shí),可以編譯通過(guò),但是運(yùn)行時(shí)會(huì)報(bào)錯(cuò):

unrecognized selector sent to instance

因?yàn)閟etter、getter方法沒(méi)有實(shí)現(xiàn)。
實(shí)現(xiàn)方法:
通過(guò)建立關(guān)聯(lián)引用的方式,實(shí)現(xiàn)setter、getter方法。
3.分類(lèi)中增加的方法如果與原有類(lèi)的方法重名,則分類(lèi)中的方法會(huì)覆蓋原有類(lèi)的方法,因?yàn)榉诸?lèi)的優(yōu)先級(jí)更高。

擴(kuò)展(Extension)

擴(kuò)展可以看作是匿名的分類(lèi)。
擴(kuò)展可以為一個(gè)已經(jīng)存在的類(lèi)添加方法和屬性。
擴(kuò)展在編譯期決議。擴(kuò)展一般用來(lái)隱藏類(lèi)的私有信息,你必須有一個(gè)類(lèi)的源碼才能為一個(gè)類(lèi)添加擴(kuò)展。

category 和 extension 的區(qū)別

  • 相同點(diǎn):都可以為一個(gè)類(lèi)添加方法
  • 不同點(diǎn):Category只能用于添加方法,不能用于添加成員變量。extension中聲明的方法和添加的成員變量是私有的,只有主implement能調(diào)用,外部的類(lèi)無(wú)法調(diào)用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天在研究swift的時(shí)候看到了分類(lèi)和擴(kuò)展。這是兩個(gè)十分重要有用的功能,但是之前用的不多,沒(méi)有深入了解過(guò),在今天就...
    weicyNO_1閱讀 2,980評(píng)論 1 3
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,618評(píng)論 30 472
  • 目錄 丫頭和別人最不一樣的地方,就是她晚上特能睡,早上特早醒。所以,第二天一大早,我的兩個(gè)酒窩又一次慘遭蹂躪。 “...
    lekli閱讀 545評(píng)論 0 1
  • 1.這個(gè)世界充滿著驚喜與驚嚇! 2.信息是致富的關(guān)鍵。 3.紙上得來(lái)終覺(jué)淺,絕知此事要躬行。
    Eric小風(fēng)閱讀 183評(píng)論 0 0
  • 時(shí)文 女兒對(duì)色彩的敏感,得益于她從小學(xué)畫(huà)畫(huà)。她上中班的時(shí)候,我就送她去少年宮跟一位美術(shù)老師學(xué)畫(huà)畫(huà)。一天她學(xué)畫(huà)回來(lái),...
    時(shí)間yi閱讀 725評(píng)論 1 4

友情鏈接更多精彩內(nèi)容