2013-02-07 88 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

通常情況就是這樣,但你無法確定。這是非常沮喪。 –