Posing

【Posing】Posing有点像类别,但不太一样。它允许你扩充一个类,并且全面性地扮演(pose)这个超类。例如:你有一个扩充NSArry的NSArrayChild对象。如果你让NSArrayChild扮演NSArry,则在你的代码中所有的NSArray都会自动被替代为NSArrayChild.

@interface FractionB: Fraction
-(void) print;
@end


@implementation FractionB
-(void) print {
printf( "(%i/%i)", numerator, denominator );
}
@end

Fraction.m

int main( int argc, const char *argv[] ) {
Fraction *frac = [[Fraction alloc] initWithNumerator: 3 denominator: 10];
// print it
printf( "The fraction is: " );
[frac print];
printf( "\n" );


// make FractionB pose as Fraction
[FractionB poseAsClass: [Fraction class]];

Fraction *frac2 = [[Fraction alloc] initWithNumerator: 3 denominator: 10];

// print it
printf( "The fraction is: " );
[frac2 print];
printf( "\n" );
// free memory
[frac release];
[frac2 release];


return 0;
}

Main.m

The fraction is: 3/10
The fraction is: (3/10)

输出
这个程序的输出中,第一个fraction会输出3/10,而第二个会输出(3/10),这是FractionB中实现的方式。poseAsClass这个方法是NSObject的一部分,它允许子类扮演超类。

    推荐阅读