? ? 1)Extension在編譯期間就已經(jīng)決定了,它就是類的一部分贿条,在編譯器和頭文件里的@interface以及實(shí)現(xiàn)文件里的@implement一起形成一個完整的類雹仿,它伴隨類的產(chǎn)生而產(chǎn)生,亦隨之一起消滅整以。extension一般用來隱藏類的私有信息胧辽,你必須有一個類的源碼才能為一個類添加extension,所以無法為系統(tǒng)的類公黑,比如NSString添加extension票顾。
? ? 2)Category則是在運(yùn)行期間決定的。extension可以添加實(shí)例變量帆调,而category是無法添加實(shí)例變量的(因?yàn)樵谶\(yùn)行期間奠骄,對象的內(nèi)存布局已經(jīng)確定,如果添加實(shí)例變量就會破壞類的內(nèi)部布局番刊,這對于編譯型語言來說是災(zāi)難性的)含鳞。