[转]Objective C 的 Posing
Posing 有点像 categories,但是不太一样。它允 许你扩充一个 class,并且全面性地的扮演(pose)这个 super class。例如:你有一个扩充 NSArray 的 NSArrayChild 物件。如果你让 NSArrayChild 扮演 NSArray,则在你的程序代码中所有的 NSArray 都会自动被替代为 NSArrayChild。
例子:
#import "Fraction.h" @interface FractionB: Fraction -(void) print; @end @implementation FractionB; -(void) print { printf (" (%i/%i) ", numerator, denominator); } @end int main (int argc, char *argv[]) { Fraction *a; Fraction *b; Fraction *result; [FractionB poseAs: [Fraction class]]; a = [[Fraction alloc] init]; b = [[Fraction alloc] init]; [a setTo: 1 over: 3]; [b setTo: 2 over: 5]; [a print]; printf (" + "); [b print]; printf (" = "); result = [a add: b]; [result print]; printf ("\n"); [a free]; [b free]; [result free]; return 0; }
输出结果:
(1/3) + (2/5) = (11/15)
Posing (扮演)和Categories(类目)的区别是:对于子类override父类方法的
情况,Categories 不能再调用父类的被重写的方法了;而Posing 可以通过“
[super 方法];”方式来调用父类被重写的方法。