網路城邦
上一篇 回創作列表 下一篇   字體:
Objective-C的category
2011/03/02 09:26:39瀏覽510|回應0|推薦0

有的時候,想要加上新的功能,但又不想更動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適用在增加全新功能,而又不會對原有的功能有影響的時候。

( 知識學習其他 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=paraquat&aid=4936929