-2

クラスメソッドは静的メソッドですか?この議論は本当ですか?したがって、allocはクラスメソッドであるため、NSStringを宣言すると

NSString * hello = [[NSString alloc] init]; クラスメソッド

[こんにちはisEqualtoString:@"こんにちは"]; インスタンスメソッド

4

2 に答える 2

2

オブジェクト指向プログラミングでは、クラスメソッドは、クラスに適用/呼び出されるメソッド/関数であり、その特定のインスタンス、つまりそのクラスのオブジェクトではありません。インスタンス メソッドは、オブジェクトに対して直接呼び出されるメソッドです。

一部の言語では、各クラスは Class オブジェクトで表されるため、クラス メソッドはそのオブジェクトのインスタンス メソッドです。これは、リフレクションとイントロスペクションを適用するのに役立ちます。

object-c では、クラス メソッドは+その宣言の前にシンボルを使用して定義されますが、インスタンスメソッドは-それらの前に を使用します。次に例を示します。

@interface Rectangle : NSObject

    + (void)join:(Rectangle *)firstRect withAnother:(Rectangle *)secondRect;
    - (void)area;

@end

クラス メソッドは、特定のオブジェクトを参照する必要がない場合、またはそれらすべてを変更する必要がある場合、または単にインスタンス オブジェクトに関連しない関数の場所が必要な場合によく使用されます。

あなたstaticはあなたの質問で言いました。クラス メソッドの宣言の前にキーワード static がある Java のような言語を参照している可能性があります。Objective-C では、キーワード static はC で使用されるのと同じ意味を持ちます。

参考として、 SOまたはこの段落でこの回答を見ることができます。

于 2012-08-31T06:42:16.407 に答える
0

クラスメソッドは、C++のメソッドに似ていると考えることができます。static

[NSString alloc]  <=>  /* hypothetical */ NSString::alloc()

しかし、舞台裏では大きな違いがあります。たとえば、C ++メソッドでは、;staticを使用できません。thisObjective-Cクラスメソッドでselfは、完全に有効であり、クラスオブジェクトを参照します。

于 2012-08-31T07:00:15.997 に答える