クラスメソッドは静的メソッドですか?この議論は本当ですか?したがって、allocはクラスメソッドであるため、NSStringを宣言すると
NSString * hello = [[NSString alloc] init]; クラスメソッド
[こんにちはisEqualtoString:@"こんにちは"]; インスタンスメソッド
クラスメソッドは静的メソッドですか?この議論は本当ですか?したがって、allocはクラスメソッドであるため、NSStringを宣言すると
NSString * hello = [[NSString alloc] init]; クラスメソッド
[こんにちはisEqualtoString:@"こんにちは"]; インスタンスメソッド
オブジェクト指向プログラミングでは、クラスメソッドは、クラスに適用/呼び出されるメソッド/関数であり、その特定のインスタンス、つまりそのクラスのオブジェクトではありません。インスタンス メソッドは、オブジェクトに対して直接呼び出されるメソッドです。
一部の言語では、各クラスは Class オブジェクトで表されるため、クラス メソッドはそのオブジェクトのインスタンス メソッドです。これは、リフレクションとイントロスペクションを適用するのに役立ちます。
object-c では、クラス メソッドは+
その宣言の前にシンボルを使用して定義されますが、インスタンスメソッドは-
それらの前に を使用します。次に例を示します。
@interface Rectangle : NSObject
+ (void)join:(Rectangle *)firstRect withAnother:(Rectangle *)secondRect;
- (void)area;
@end
クラス メソッドは、特定のオブジェクトを参照する必要がない場合、またはそれらすべてを変更する必要がある場合、または単にインスタンス オブジェクトに関連しない関数の場所が必要な場合によく使用されます。
あなたstatic
はあなたの質問で言いました。クラス メソッドの宣言の前にキーワード static がある Java のような言語を参照している可能性があります。Objective-C では、キーワード static はC で使用されるのと同じ意味を持ちます。
クラスメソッドは、C++のメソッドに似ていると考えることができます。static
[NSString alloc] <=> /* hypothetical */ NSString::alloc()
しかし、舞台裏では大きな違いがあります。たとえば、C ++メソッドでは、;static
を使用できません。this
Objective-Cクラスメソッドでself
は、完全に有効であり、クラスオブジェクトを参照します。