字體:小 中 大 | |
|
|
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適用在增加全新功能,而又不會對原有的功能有影響的時候。 |
|
( 知識學習|其他 ) |