是否可以将方法覆盖为类别方法?
@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类复制粘贴相同的代码块。思考只需导入和使用。
答案 0 :(得分:4)
不,Apple没有提出这个问题,如果你这样做,那就是未定义的行为。在这种情况下,将使用这两种方法中的一种,您无法知道哪一种方法。
避免使用类别方法名称冲突
因为在类别中声明的方法被添加到现有类中,所以需要非常小心方法名称。
如果在类别中声明的方法的名称与原始类中的方法相同,或者在同一个类(或甚至是超类)中的另一个类别中的方法相同,则行为未定义为哪个方法实现在运行时使用。如果您使用具有自己类的类别,则不太可能成为问题,但在使用类别向标准Cocoa或Cocoa Touch类添加方法时可能会出现问题。