我有兩個類,1類和類2,第二個從第一個繼承了父母的隱藏方法。我需要重寫Class1的-update方法來實現我的目標。繼承方法中的-update方法的變化是在代碼中間執行的,所以我不能使用[超級更新]。這就是爲什麼我需要將原始方法從父級複製粘貼到繼承類。此方法使用父級的私有方法,因此當我嘗試重寫時,由於Class2僅導入Class1.h,因此我收到了私有方法缺失的警告。爲了澄清,這裏是代碼:如何讓繼承類能夠看到在Objective-C
Class1.h:
@interface Class1 : NSObject
-(void) update;
@end
Class1.m:
@interface Class1 (Private)
-(void) private1;
-(void) private2;
@end
@implementation Class1
-(void) update
{
[self private1];
[self private2];
}
-(void) private1
{
// some code
}
-(void) private2
{
// another code
}
@end
Class2.h:
@interface Class2 : Class1
-(void) update;
@end
Class2.m:
@implementation Class2
-(void) update
{
[self private1]; // warning here
// do my own stuff between private methods, that is the reason of inheritance
[self private2]; // warning too
}
@end
另外,Class1不在我的所有權,它是一個來自開源庫(準確地說Cocos3D),所以我不能改變它(這就是爲什麼我繼承)。
的問題是:我怎麼能刪除警告?我能看到的唯一解決方案是將私有方法的簽名複製到Class2,但它似乎是一個骯髒的伎倆。或者,如果有人沒有指出如何去除警告,那將是完美的,但如何更好地改變方法來實現我的目標。
複製類擴展'@interface Class1的(私人)... @ end'似乎是一個乾淨的解決方案給我。使用'performSelector'或'objc_msgSend'將是一個骯髒的伎倆。 – 2013-03-07 13:54:53
如何將這些常用方法應用到公共可視化中,如何在子類中使用。 – 2013-03-07 13:58:04
@MartinR好吧,-performSelector是最有趣的解決方案,但是由於我從原始的更新中複製粘貼代碼,重寫調用私有方法似乎太不舒服(實際上大約有10種這樣的方法) – medvedNick 2013-03-07 14:00:37