1

私は通常、別のオブジェクトでメソッドを呼び出したい場合、次のことを行います。

NewObject *object = [NewObject alloc]init];

[object callMethod];

しかし、私はオブジェクト自体ではないクラスを作成しました。つまり、プロパティやメモリ管理がありません。いくつかのものを計算するいくつかのメソッドがあります。

他のクラスから、私がしなければならないのは、このクラスのヘッダーをインポートして、次のことを行うことだけです。

#import "MyClass.h"

[MyClass callMethod];

この場合、なぜinitを割り当てる必要がないのですか?それはうまく機能します。

4

4 に答える 4

1

クラスメソッドを呼び出そうとしているようです。これらは、次のように定義されているメソッドです。

  • +(void)myStaticMethod;

それ以外の

  • -(void)myMethod;

プラス記号は、メソッドがフィールドを使用しないため、オブジェクトをインスタンス化する必要がないことを示します。

この例では、「object」は、メモリが割り当てられて初期化されたクラス「NewObject」のインスタンスです。一方、あなたの例のように、「MyClass」は、上記のように宣言された静的メンバーを持っているため、インスタンス化する必要がないクラスにすぎません。

クラスメソッドは、通常ストレートCで行われるように、関連する関数の束を通常の名前空間に分散させるのではなく、1つの場所にまとめる優れた方法を提供します。クラスメソッドとインスタンスメソッドの両方を同じものにすることもできます。クラス、必要に応じてクラスのものを使用し、必要に応じてインスタンスのものを使用するようにクラスをインスタンス化します。

編集:静的メソッドの代わりにクラスメソッドを参照するように用語を変更しました。

于 2012-08-09T18:21:33.837 に答える
1

クラスメソッドを呼び出しているからです。alloc initオブジェクトだけが必要です。クラスを含める必要があるだけで、alloc init編集する必要はありません。したがって、NSStringクラスを開始する必要はありません。

編集:

ナンセンスな例をいくつか挙げましょう。

+ (void)classMethod {
    NSLog("Hi!");
}

[SomeClass classMethod];     // prints Hi!

- (void)instanceMethod {     // (say it's an instance method of NSString)
    NSLog(self);
}

[@"someNSString" instanceMethod];   // prints someNSString. But you need to have a string first, otherwise you cannot use this method.
于 2012-08-09T18:13:31.120 に答える
0

クラスメソッドは、クラスの具体的なインスタンスを作成せずに呼び出すことができるという点で、C++静的メソッドに似ています。これの有用性は、クラスの専用ファクトリメソッドを呼び出して新しいインスタンスを作成できることです。または、タスクに応じて具体的なインスタンスを提供する場合と提供しない場合があるクラスのスコープの下でユーティリティライブラリを定義できます。

NSDateとNSNumberは、Foundationフレームワークでのこの良い例です。

于 2012-08-09T18:26:15.430 に答える
0

selfオブジェクトで呼び出されてアクセスできる「インスタンス」メソッド(通常のメソッド)と、クラスで呼び出されて呼び出される「クラス」メソッド(多くのプログラミング言語では静的と呼ばれる)には違いがあります。はありませんself

于 2012-08-09T18:16:32.900 に答える