-1

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

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

4

1 回答 1

4

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

避免类别方法名称冲突

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

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

于 2013-02-07T22:34:55.960 回答