Extension,Category
Extension看起來很像一個匿名的category,但是extension和有名字的category幾乎完全是兩個東西。 extension在編譯期決議,它就是類的一部分,在編譯期和標頭檔案裡的@interface以及實現檔案裡的@implement一起形成一個完整的類,它伴隨類的產生而產生,亦隨之一起消亡。extension一般用來隱藏類的私有資訊,你必須有一個類的原始碼才能為一個類新增extension,所以你無法為系統的類比如NSString新增extension
但是Category則完全不一樣,它是在執行期決議的。
就category和extension的區別來看,我們可以推匯出一個明顯的事實,extension可以新增例項變數,而category是無法新增例項變數的(因為在執行期,物件的記憶體佈局已經確定,如果新增例項變數就會破壞類的內部佈局,這對編譯型語言來說是災難性的)1)、category的方法沒有“完全替換掉”原來類已經有的方法,也就是說如果category和原來類都有methodA,那麼category附加完成之後,類的方法列表裡會有兩個methodA
2)、category的方法被放到了新方法列表的前面,而原來類的方法被放到了新方法列表的後面,這也就是我們平常所說的category的方法會“覆蓋”掉原來類的同名方法,這是因為執行時在查詢方法的時候是順著方法列表的順序查詢的,它只要一找到對應名字的方法,就會罷休
相關文章
- IOS category 與 extensioniOSGo
- 談談Category和ExtensionGo
- iOS Extension Category Protrol 例子理解iOSGo
- Objective-C 類別(category)和擴充套件(Extension)ObjectGo套件
- iOS分類(category)、類擴充套件(extension)、繼承的區別iOSGo套件繼承
- iOS學習筆記2(結合專案)--Category和Extension的區別iOS筆記Go
- Category探索Go
- hello categoryGo
- man categoryGo
- 面向 Extension 開發 ? Today Extension
- App ExtensionAPP
- Category – 簡介Go
- 分類-CategoryGo
- OC Category、AssociatedObjectGoObject
- Hack With Chrome ExtensionChrome
- php mongodb extensionPHPMongoDB
- mysqlalchemy audit extensionMySql
- Tampermonkey & Extension
- Category_theory and FunctorGo
- 如何在SAP Spartacus category 頁面裡拿到當前的category資訊Go
- App extension 總結APP
- beegoapix - beego api extensionGoAPI
- chrome開發 extensionChrome
- chrome extension/plugin pathChromePlugin
- App Extension Study 1APP
- Category的本質<一>Go
- iOS底層原理-CategoryiOSGo
- Category的實現原理Go
- iOS設計模式——CategoryiOS設計模式Go
- 10.2.0.4 Bug Fixes by CategoryGo
- Item category - VOV7Go
- Swift學習之路-ExtensionSwift
- FSLib.Extension庫
- swiftUI-extension的使用SwiftUI
- rocky 安裝gnome extension
- SAP MM Purchase Order History CategoryGo
- 探秘Runtime - 深入剖析CategoryGo
- Category 的一些事Go