Objective c 重写类别中的方法?

Objective c 重写类别中的方法?,objective-c,ios6,cocos2d-iphone,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类复制粘贴相同的代码块。只需导入和使用即可。不,苹果

是否可以将方法重写为类别方法

@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类复制粘贴相同的代码块。只需导入和使用即可。

不,苹果公司不建议这样做,如果这样做,这是未定义的行为。在这种情况下,将使用两种方法中的一种,但您不知道是哪一种

避免类别方法名称冲突

由于类别中声明的方法是添加到现有类中的,因此需要非常小心方法名称

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


我认为最后一个导入的头是使用draw方法的赢家?不,“赢家”是在运行时决定的。通常是这样的,但您不能确定。这是非常不鼓励的。如果我定义一个助手类。我必须重新定义超过8-10个从超类中获取的相同方法。否则会出现错误的访问错误,所以我不想这样做。我只想定义一次重写方法,必要时在子类中使用。那么,你更喜欢我做什么呢?我建议使用子类。你可以创建CCSprite的子类,比如BetterSprite,然后所有派生的sprite类都可以从BetterSprite继承,而不是从CCSprite继承。尝试将-voidDelaloc category方法添加到NSObject中,看看你的应用泄漏的程度:D