Category類別、Extension擴(kuò)展

在介紹Category和Extension之前我們先說下屬性和成員變量。
屬性:我們使用 property聲明的,如下代碼

@interface People ()

@property (nonatomic, strong) NSString  *ageS;

@end

成員變量:我們寫在{}中的,如下代碼

@implementation People{
    NSString            *adress;//聲明一個成員變量
}

或者

@interface People (){
    NSString        *email;//聲明一個成員變量
}

@property (nonatomic, strong) NSString  *ageS;

@end

Category類別(類目)

什么是Category?

Category:是Objective-C 2.0之后添加的語言特性,類目、類別說的都是category。
主要作用是為已有的類添加方法??梢远嗳藢ν粋€類添加不同的業(yè)務(wù)處理方法,同步開發(fā),互不影響。
形式:有.h和.m文件,類名+(類別名)這種樣式。

category特點(diǎn)

  • 有實(shí)現(xiàn)文件,即.m
  • 不能直接添加屬性。因?yàn)閏ategory不能自動生成set和get方法,需要我們自己添加,生成代碼下面會介紹
  • 不能添加成員變量
  • 如果定義的方法名和類中原有方法名稱一直,會執(zhí)行category定義的方法
  • 如果定義了兩個category,里面有方法名稱一直,那運(yùn)行時會執(zhí)行最后編譯的那個category對應(yīng)的方法。

category如何定義屬性

因?yàn)閏ategory不能直接定義屬性,需要我們自己添加set和get方法。代碼如下:
.h文件中添加屬性

@interface People (CategoryTest)

@property (nonatomic, strong) NSString      *name;

@end

.m中添加set和get方法。需要使用runtime,如下

- (void)setName:(NSString * _Nonnull) name{
    objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *) name{
    return objc_getAssociatedObject(self, @selector(name));
}

Extension擴(kuò)展

什么是Extension

extension擴(kuò)展:在已有的類中添加屬性、方法、成員變量。擴(kuò)展、延展指的都是extension。
主要作用是為類添加屬性、方法、成員變量。
形式:只有.h文件,類名+()這種樣式。如下

@interface People ()

@property (nonatomic, strong) NSString  *ageS;

@end

大家看到上面這種形式是不是感覺很熟悉。就是我們經(jīng)常在.m里面直接添加的,用來聲明私有的方法或者屬性。

extension特點(diǎn)

  • 可以生成屬性、方法、成員變量
  • 只有.h文件。不能單獨(dú)使用,必須寄生在原有類中才可以使用。
  • 只定義,不實(shí)現(xiàn)。

category和extension的區(qū)別

從上面他們兩個的特點(diǎn)我們就可以總結(jié)category和extension的區(qū)別,如下:

  • 外形上不同。category既有聲明文件又有實(shí)現(xiàn)文件,extension只有聲明文件
  • category不能直接添加屬性,extension可以直接添加屬性
  • category不能添加成員變量,extension可以
  • category不用寄生原有類中,extension必須寄生在原有類中,實(shí)現(xiàn)聲明的方法或者屬性
  • category是在運(yùn)行時決定的,extension是編譯時
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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