2011-07-27 11 views
4

私は、MyBaseClassというObjective-Cクラスと、MySubclassedClassというサブクラスを持っているとしましょう。 backgroundColorの方法はbackgroundImageを呼び出しObjective-C:サブクラスのコールクラスメソッド

+ (UIColor *)backgroundColor; 
+ (UIImage *)backgroundImage; 

MyBaseClassは、2つのクラスのメソッドを有します。それはMyBaseClassに限定された場合は、私のbackgroundColor方法は

+ (UIColor *)backgroundColor { 
    UIImage *img = [MyBaseClass backgroundImage]; 
    // irrelevant 
    return color; 
} 

のようになります。しかし、私はMySubclassedClassにMyBaseClassをサブクラス化することができるようにしたいです。 backgroundColorは変更されず、常に親のbackgroundImageメソッドを呼び出します。このシナリオでは、すべてのサブクラスでbackgroundImageがオーバーライドされます。

1backgroundColor1は、インスタンスメソッドだった場合、私は単にそれが静的メソッドだときに私が使用することができます何の「自己」は存在しない、

UIImage *img = [[self class] backgroundImage]; 

を使用するだろうが。

私はObjective-Cでこれを達成できますか?

+2

そして、なぜクラスのメソッドに自己がないと思いますか? – bealex

+2

"静的メソッド"という言葉を "クラスメソッド"に置き換えました。 Objective-Cのクラスメソッドは 'static'ではなく' C++ 'の意味で 'virtual'です...私はこのC++の用語の選択は残念だと思います。 – Yuji

答えて

12

メッセージを別のクラスメソッドからクラスメソッドに送信すると、selfがそのクラスです。したがって、次の操作を行うことができます。

UIImage *img = [self backgroundImage]; 
+0

ありがとうございます。クラスに参照される自己を認識していない。 – Neil

4

クラス(静的)メソッド内でselfを使用できます。この場合、selfはクラスオブジェクトを参照します。

関連する問題