[转]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 方法];”方式来调用父类被重写的方法。

 
posted @ 2013-03-10 22:25  IT-Chris  阅读(312)  评论(0编辑  收藏  举报