0

クラスメソッドとオブジェクトメソッドの違いは知っていますが、iOSでクラスメソッドを使用する理由がわかりません。誰かが私に例を教えてくれるので、私はそれを理解することができます.. ??

4

5 に答える 5

1

クラスメソッドはクラスが処理するメソッドであり、インスタンスメソッドは個々のインスタンスのメソッドです。

NSStringクラスメソッドの一般的なユースケースは、 'sのような便利なアロケータ+stringWithFormat:です。使用するのと同じですが(ARCを使用していない場合は自動リリースが追加されます)[[NSString alloc] initWithFormat:] 、時間を大幅に節約できます。

別の例はMFMailComposeViewController+canSendMailメソッドです。メールの送信がサポートされているかどうかを確認するためだけに、最初にインスタンスを作成する必要はありません。クラスはこれをよく知っているため、このメソッドはインスタンスメソッドではなくクラスメソッドです。

同様の質問

于 2012-07-31T12:49:19.353 に答える
1

Stackoverflowはあなたの友達です。

クラスメソッドとインスタンスメソッドの違いは何ですか?

クラスメソッドは通常、NSStringの+ stringWithFormatなどの便利なメソッドです。つまり、クラスを使用するためにクラスをインスタンス化する必要はありません。

于 2012-07-31T12:51:29.320 に答える
1

クラスメソッドとオブジェクトメソッド。

@interface TheClassA : NSObject
+ (TypeA)classMethod;
- (TypeB)objectMethod;
@end

@implementation TheClassA

+ (TypeA)classMethod
{
}

- (TypeB)objectMethod
{
}

@end



main()
{
   [TheClassA classMethod]; // Correct!!!
   [TheClassA objectMethod]; // Wrong!!!

   TheClassA *obj = [[TheClassA alloc] init];
   [obj classMethod]; // Wrong;
   [obj objectMethod]; // Correct;
   [obj.class classMethod]; // Correct
   [obj.class objectMethod]; // Wrong
}

クラスメソッドには、一般的なC言語関数のようなスコープがあります。グローバル方式です。しかし...オブジェクトメソッドはオブジェクトのみを有効にします...クラスメソッドはそのクラスプロパティを変更できず、オブジェクトにメッセージを送信できません。ただし、オブジェクトメソッドはオブジェクトにメッセージを送信したり、プロパティを変更したりできます。

幸運を。

于 2012-07-31T12:52:59.033 に答える
1

私はよくクラスメソッドを使用して、「シングルトン」と呼ばれるデザインパターンを使用するプログラムを作成します。たとえば、他のクラスからのリクエストを処理するクラスがある場合、リクエスト処理クラスのインスタンス化は1回だけで済み、プログラム全体で同じものを使用する必要があります。リクエスト処理クラスに、インスタンス化を保持する静的変数を配置します。

static MyRequestHandler *requestHandler;

そして、クラスメソッドを使用して取得します。まだ存在していない場合は、最初に作成してから保存します。

+ (MyRequestHandler *) getRequestHandler {
     if (requestHandler == nil) {
         requestHandler = [[MyRequestHandler alloc]init];
     }
     return requestHandler;
}

他のクラスは、このようなコードでこのインスタンス化に到達できます

MyRequestHandler *requestHandler = [MyRequestHandler getRequestHandler];
于 2012-07-31T13:00:57.850 に答える
0

クラスメソッドは、ライブラリルーチンに使用されます。これらのメソッドにアクセスするために、オブジェクトを作成する必要はありません。

たとえば、オブジェクトを簡単に初期化できる場合があります。

NSArray *arr = [NSArray array];
于 2012-07-31T12:48:05.147 に答える