国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Category 和 Extension 的區(qū)別

這篇具有很好參考價值的文章主要介紹了Category 和 Extension 的區(qū)別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

category

@interface ClassName (CategoryName)
 
@end

extension 又被稱為匿名分類(anonymous category)

@interface ClassName ()
 
@end

可以在 extension 的{}中添加自定義的實例變量

@interface XYZPerson () {
    id _someCustomInstanceVariable;
}
...
@end

主要區(qū)別

  • Category是運行時決定生效的,Extension是編譯時就決定生效的
  • Category可以為系統(tǒng)類添加分類,Extension不能。
  • Category是有聲明和實現(xiàn),Extension直接寫在宿主.m文件,只有聲明。
  • Category只能擴充方法,不能擴充成員變量和屬性。
  • 如果Category聲明了一個屬性,那么Category只會生成這個屬性的set,get方法的聲明,也就不是會實現(xiàn) get set 方法。屬性的實例變量無法被存儲,除非是原有類的實例變量。
  • 如果我們在 extension 中添加了方法, 那么這些方法必須在類的實現(xiàn)中實現(xiàn)。

參考:https://juejin.cn/post/6960972413240606734

swift 不能在 extension 中添加存儲屬性,但可以通過 AssociatedKey 的方式來間接實現(xiàn)。

public extension UIView {
    private struct AssociatedKey {
        static var identifier: String = "identifier"
    }
    
    public var identifier: String {
        get {
            return objc_getAssociatedObject(self, &AssociatedKey.identifier) as? String ?? ""
        }
        
        set {
            objc_setAssociatedObject(self, &AssociatedKey.identifier, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
        }
    }
}

參考:https://juejin.cn/post/6856416734577410055

swift 的 extension 相當于影分身,每個分身可以具有不同技能(遵循了某個協(xié)議或數(shù)據(jù)源或新定義一下方法)

swift 的 category 寫法:extension name on SomeClass文章來源地址http://www.zghlxwxcb.cn/news/detail-741440.html

extension SomeName on DateTime {
  
}

到了這里,關(guān)于Category 和 Extension 的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 報錯building for iOS Simulator, but linking in object file built for iOS

    報錯building for iOS Simulator, but linking in object file built for iOS

    Coderliszt 2021.04.24 22:33:37字數(shù) 277閱讀 1,158 article class=\\\"_2rhmJa\\\" 這個M1芯片下Xcode 編譯錯誤的解決方案: Xcode版本:12.3 M1芯片的Macbook pro 在選中模擬器進行編譯的時候,會報如下類似錯誤。 building for iOS Simulator, but linking in object file built for iOS, file \\\'xxx/Pods/WechatOpenSDK/WeChatSDK1.8.5/lib

    2023年04月08日
    瀏覽(22)
  • 面試題:簡單說一下阻塞IO、非阻塞IO、IO復(fù)用的區(qū)別 ?

    面試題:簡單說一下阻塞IO、非阻塞IO、IO復(fù)用的區(qū)別 ?

    在《Unix網(wǎng)絡(luò)編程》一書中提到了五種IO模型,分別是:阻塞IO、非阻塞IO、IO復(fù)用、信號驅(qū)動IO以及異步IO。本篇文章主要介紹IO的基本概念以及阻塞IO、非阻塞IO、IO復(fù)用三種模型,供大家參考學(xué)習(xí)。 計算機視角理解IO: 對于計算機而言,任何涉及到計算機核心(CPU和內(nèi)存)與其

    2024年01月22日
    瀏覽(22)
  • 【Effective Objective - C】—— 熟悉Objective-C

    【Effective Objective - C】—— 熟悉Objective-C

    Objective-C通過一套全新語法,在C語言基礎(chǔ)上添加了面向?qū)ο筇匦?。Objective-C的語法中頻繁使用方括號,而且不吝于寫出極長的方法名,這通常令許多人覺得此語言較為冗長。其實這樣寫出來的代碼十分易讀,只是C++或Java程序員不太能適應(yīng)。 Objective-C語言學(xué)起來很快,但有很

    2024年01月16日
    瀏覽(36)
  • objective-c 基礎(chǔ)學(xué)習(xí)

    objective-c 基礎(chǔ)學(xué)習(xí)

    目錄 第一節(jié):OC 介紹 ??第二節(jié):Fundation 框架 ?第三節(jié):NSLog 相對于print 的增強 ?第四節(jié):NSString ?第五節(jié):oc新增數(shù)據(jù)類型 第六節(jié): 類和對象 ?類的方法的聲明與實現(xiàn) ?第七節(jié):類和對象的存儲 第八節(jié):nil 與 NULL 第九節(jié):分組導(dǎo)航標記#pragma mark ?第十節(jié):方法與函

    2024年02月07日
    瀏覽(33)
  • 第一章 熟悉Objective-C

    Objective—C語言是由Smalltalk演化而來,后者是消息型語言的鼻祖,所以該語言使用的“消息結(jié)構(gòu)”而非“函數(shù)調(diào)用”。 1. 消息和函數(shù)調(diào)用之間的區(qū)別 關(guān)鍵區(qū)別在于: 使用消息結(jié)構(gòu)的語言,其運行所應(yīng)執(zhí)行的代碼由運行環(huán)境來決定;而使用函數(shù)調(diào)用的語言,則由編譯器決定。

    2024年01月18日
    瀏覽(19)
  • use gnustep objective-c

    專注于概念,而不是迷失在語言技術(shù)細節(jié)中 編程語言的目的是成為一個更好的程序員; 也就是說,在設(shè)計和實現(xiàn)新系統(tǒng)以及維護舊系統(tǒng)方面變得更加有效 header preprocess interface implementation method variable declare and expression comment basic integer set and float set enum type void type derive type incl

    2024年02月14日
    瀏覽(24)
  • Objective-C日期NSDate使用

    2024年01月21日
    瀏覽(25)
  • Effective Objective-C 學(xué)習(xí)(二)

    “屬性”(property)是 Objective-C 的一項特性,用于封裝對象中的數(shù)據(jù)。Objective-C 對象通常會把其所需的數(shù)據(jù)保存為各種實例變量。實例變量一般通過“存取方法”來訪問。其中,“獲取方法”(getter)用于讀取變量值,而“設(shè)置方法”(setter)用于寫入變量值。開發(fā)者可以令

    2024年02月20日
    瀏覽(15)
  • Effective Objective-C 學(xué)習(xí)(四)

    在執(zhí)行后臺任務(wù)時,GCD 并不一定是最佳方式。還有一種技術(shù)叫做 NSOperationQueue,它雖然與 GCD 不同,但是卻與之相關(guān),開發(fā)者可以把操作以 NSOperation 子類的形式放在隊列中,而這些操作也能夠并發(fā)執(zhí)行。 GCD是純C的API,而NSOperationQueue是Objective-C的對象。這意味著使用GCD時,任

    2024年02月19日
    瀏覽(15)
  • Effective Objective-C 學(xué)習(xí)(三)

    Objective-C 使用引用計數(shù)來管理內(nèi)存:每個對象都有個可以遞增或遞減的計數(shù)器。如果想使某個對象繼續(xù)存活,那就遞增其引用計數(shù):用完了之后,就遞減其計數(shù)。計數(shù)變?yōu)?0時,就可以把它銷毀。 在ARC中,所有與引用計數(shù)有關(guān)的方法都無法編譯(由于 ARC 會在編譯時自動插入

    2024年02月22日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包