有的時候,想要加上新的功能,但又不想更動class原有的設定時,可以用category的方式來對class增加新的method。但category不能增加新的instance variable。其宣告方式很像class 的宣告方式。
@interface ThisClass (category)
-newMethod1;
-newMethod2;
....
@end
宣告完category後,再從@implementation處實作這些新宣告的方法:
@implementation ThisClass (category)
-newMethod1{
...
}
-newMethod2{
...
}
...
@end
在Programing in Objective-C 2.0中,以Fraction class為例子,為Fraction class增加新的計算功能的MoreFraction的category:
@interface Fraction (MoreFraction)
-(Fraction *) add: (Fraction *)f;
-(Fraction *) sub: (Fraction *)f;
-(Fraction *) mul: (Fraction *)f;
-(Fraction *) div: (Fraction *)f;
@end
@implementation Fraction (MoreFraction)
...
@end
這樣就等於對Fraction class 增加了加減乘除四個運算方法。其中要注意的地方是add: 方法是重寫(overwrite)了,這時如果呼叫了add: ,只會是以category的實作的add:。原先定義的add:就無法再被呼叫使用了。
所以有方法需要增加新功能,但又想保留使用舊功能(如使用super語法)的時候,就用subclass的方式重寫,而不要用category的方式來重寫。
Category適用在增加全新功能,而又不會對原有的功能有影響的時候。
限會員,要發表迴響,請先登入


