2013-02-07 77 views
-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只需导入和使用。

+1

您可以创建'CCSprite'的子类,让我们说'BetterSprite',然后所有派生的精灵类都可以从'BetterSprite'而不是'CCSprite'继承。 – Tricertops

+0

尝试在NSObject中添加' - (void)dealloc'类别方法,看看你的应用程序有多糟糕:D – Jeremy

回答

4

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

避免分类方法名称冲突

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

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

+0

我认为最后导入的头文件是使用draw方法的优胜者? –

+1

没有“赢家”是在运行时决定的。 – Tricertops

+0

通常情况就是这样,但你无法确定。这是非常沮丧。 –