Class1とClass2の2つのクラスがあり、2番目のクラスは最初のクラスから継承されています。目標を達成するには、Class1の-updateメソッドをオーバーライドする必要があります。継承メソッドの-updateメソッドの変更はコードの途中で行われるため、[superupdate]は使用できません。そのため、元のメソッドを親から継承されたクラスにコピーアンドペーストする必要があります。このメソッドは親のプライベートメソッドを使用しているため、オーバーライドしようとすると、Class2はClass1.hのみをインポートするため、プライベートメソッドがないという警告が表示されます。明確にするために、ここにコードがあります:
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にコピーすることですが、それは汚いトリックのようです。または、誰かが警告を削除する方法ではなく、方法をよりうまく変更するという私の目標を達成する方法を指摘するなら、それは完璧でしょう。