-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 クラスに同じコードブロックをコピー アンド ペーストするのを防止します。思考 インポートして使用するだけです。

4

1 に答える 1

4

いいえ、これは Apple によって提案されたものではありません。それを行うと、未定義の動作になります。この場合、2 つの方法のいずれかが使用されますが、どちらの方法かはわかりません。

カテゴリ メソッド名の衝突を避ける

カテゴリで宣言されたメソッドは既存のクラスに追加されるため、メソッド名には十分注意する必要があります。

カテゴリで宣言されたメソッドの名前が、元のクラスのメソッド、または同じクラス (またはスーパークラス) の別のカテゴリのメソッドと同じである場合、どのメソッド実装が使用されているかについての動作は未定義です。ランタイム。独自のクラスでカテゴリを使用している場合、これが問題になる可能性は低くなりますが、カテゴリを使用して標準の Cocoa または Cocoa Touch クラスにメソッドを追加する場合に問題が発生する可能性があります。

于 2013-02-07T22:34:55.960 に答える