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)、類擴充套件(extension)、繼承的區別iOSGo套件繼承
- Category探索Go
- App ExtensionAPP
- Tampermonkey & Extension
- mysqlalchemy audit extensionMySql
- Hack With Chrome ExtensionChrome
- php mongodb extensionPHPMongoDB
- Category的本質<一>Go
- iOS底層原理-CategoryiOSGo
- Category的實現原理Go
- 探秘Runtime - 深入剖析CategoryGo
- 如何在SAP Spartacus category 頁面裡拿到當前的category資訊Go
- App extension 總結APP
- Runtime原始碼 Category(分類)原始碼Go
- SAP MM Purchase Order History CategoryGo
- Hybris做增強的兩種方式:In App Extension和Side by Side ExtensionAPPIDE
- PostgreSQL DBA(150) - Extension(pgmetrics)SQL
- swiftUI-extension的使用SwiftUI
- rocky 安裝gnome extension
- PostgreSQL DBA(184) - Extension(hypoPG)SQL
- SAP S/4HANA裡extension include view和extension view的區別View
- ObjC中Category的原理簡析OBJGo
- iOS問題整理03----CategoryiOSGo
- JUnit 註解@Category的工作原理Go
- 【Java 8實戰】Extension MethodsJava
- Unofficial Windows Binaries for Python Extension PackagesWindowsPythonPackage
- Chrome Extension 訊息傳遞Chrome
- PostgreSQL編寫自定義extensionSQL
- Category的本質<二>load,initialize方法Go
- Category的本質<三>關聯物件Go物件
- CocoaPods工程使用外掛App ExtensionAPP
- PostgreSQL DBA(83) - Extension(pg_buffercache)SQL
- PostgreSQL DBA(84) - Extension(pg_prewarm)SQL
- PostgreSQL DBA(72) - Extension(pgplsql_check)SQL
- PostgreSQL DBA(162) - Extension(pg_catcheck)SQL
- PostgreSQL DBA(134) - Extension(auto_explain)SQLAI
- PostgreSQL DBA(130) - Extension(pgsql-gzip)SQL
- PostgreSQL DBA(133) - Extension(postgresql_anonymizer)SQL
- PostgreSQL DBA(63) - Extension(pg_qualstats)SQL