覆盖类别中的方法?

时间:2013-02-07 22:33:14

标签: objective-c ios6 cocos2d-iphone

是否可以将方法覆盖为类别方法?

@implementation CCSprite (Utilities)

-(void)draw //its already a member of CCSprite but I wantto override it. but within a category
{
   [super draw];
   [self doSomethingExtra];
}
@end

目的:防止为每个驱动的CCMySprite类复制粘贴相同的代码块。思考只需导入和使用。

1 个答案:

答案 0 :(得分:4)

不,Apple没有提出这个问题,如果你这样做,那就是未定义的行为。在这种情况下,将使用这两种方法中的一种,您无法知道哪一种方法。

  

避免使用类别方法名称冲突

     

因为在类别中声明的方法被添加到现有类中,所以需要非常小心方法名称。

     

如果在类别中声明的方法的名称与原始类中的方法相同,或者在同一个类(或甚至是超类)中的另一个类别中的方法相同,则行为未定义为哪个方法实现在运行时使用。如果您使用具有自己类的类别,则不太可能成为问题,但在使用类别向标准Cocoa或Cocoa Touch类添加方法时可能会出现问题。