iOS Categories和Extensions

Category是什么?

Category用于向已經(jīng)存在的類添加方法來(lái)達(dá)到擴(kuò)展已有類的目的。在對(duì)系統(tǒng)類進(jìn)行擴(kuò)展的時(shí)候,可以直接給系統(tǒng)類添加方法。新添加的方法同樣也會(huì)被擴(kuò)展的類的所有子類自動(dòng)繼承。

#import "ClassName.h"

@interface ClassName ( CategoryName )

// method declarations

- (void)method1;

@end

Category的注意點(diǎn):

1)不能在分類中重寫系統(tǒng)方法,因?yàn)闀?huì)把系統(tǒng)的功能給覆蓋掉,而且分類中不能調(diào)用super。但是,這種情況可以用來(lái)修復(fù),沒(méi)有源碼的類中方法有Bug的情況。

2)category不能給類添加實(shí)例變量。使用runtime的方式,可以給iOS添加屬性字段。objc_getAssociatedObject()?objc_setAssociatedObject()

3)category添加的方法不強(qiáng)制要求在implement文件中實(shí)現(xiàn),可以利用消息轉(zhuǎn)發(fā)指定其他對(duì)象去實(shí)現(xiàn)。

Category的用途

1)無(wú)需創(chuàng)建繼承類,實(shí)現(xiàn)對(duì)已有類擴(kuò)展。并且可以被擴(kuò)展的類的所有子類自動(dòng)繼承。

2)可以用來(lái)修復(fù)沒(méi)有源碼類的bug。

3)對(duì)于一個(gè)類多個(gè)開發(fā)人員維護(hù)的情況,可以根據(jù)不同用途創(chuàng)建不同分類。

Extensions

extension可以稱為匿名的category。extension聲明的方法在implement文件中一定要實(shí)現(xiàn)。extension可以添加實(shí)例變量和屬性變量。extension常用的一個(gè)功能是,原類中readonly的屬性變量,可以在extension中重新聲明為readwrite。并且屬性變量的讀寫方法都要在implement文件中實(shí)現(xiàn)。

如下:

//原類

@interface MyClass : NSObject

@property (retain, readonly) float value;

@end

// Private extension, typically hidden in the main implementation file.

@interface MyClass ()

@property (retain, readwrite) float value;

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 深入理解Objective-C:Category(上) 鏈接:http://tech.meituan.com/Di...
    簡(jiǎn)簡(jiǎn)蝸牛閱讀 991評(píng)論 0 5
  • (一)Category category是Objective-C 2.0之后添加的語(yǔ)言特性,別人口中的分類、類別其...
    小李龍彪閱讀 2,985評(píng)論 0 10
  • 一 類別的簡(jiǎn)介 在開發(fā)中有時(shí)會(huì)用到Category,類別有三個(gè)作用: (1)可以將類的實(shí)現(xiàn)分散到多個(gè)不同文件或多個(gè)...
    々莫等閑々閱讀 452評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評(píng)論 19 139
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,144評(píng)論 0 62