3

目的の c メソッド呼び出しでオプションのパラメーターを使用できることを Apple のドキュメントで読みました。Apple ドキュメントの例:

可変数のパラメーターを取るメソッドも可能ですが、それらはややまれです。追加のパラメーターは、メソッド名の末尾の後にコンマで区切られます。(コロンとは異なり、コンマは名前の一部とは見なされません。) 次の例では、架空の makeGroup: メソッドに 1 つの必須パラメーター (グループ) と 3 つのオプションのパラメーターが渡されます。

[receiver makeGroup:group, memberOne, memberTwo, memberThree];

この機能をいつ、どのように使用するかを誰か教えてもらえますか? Apple API に例はありますか?

ありがとう

4

2 に答える 2

10

あなたが記述しているメソッドのタイプは、可変引数メソッドと呼ばれます。Cocoa の例には、 および が含ま+[NSArray arrayWithObjects:]+[NSDictionary dictionaryWithObjectsAndKeys:]ます。で定義されているマクロを使用して、可変引数メソッド (または関数) の引数にアクセスしますstdarg.h

+[NSArray arrayWithObjects:]メソッドの実装方法の例を次に示します。

+ (NSArray *)arrayWithObjects:(id)firstObject, ... {
    int count = 0;
    va_list ap;
    va_start(ap, firstObject);
    id object = firstObject;
    while (object) {
        ++count;
        object = va_arg(ap, id);
    }
    va_end(ap);

    id objects[count];
    va_start(ap, firstObject);
    object = firstObject;
    for (int i = 0; i < count; ++i) {
        objects[i] = object;
        object = va_arg(ap, id);
    }
    va_end(ap);

    return [self arrayWithObjects:objects count:count];
}
于 2012-06-16T22:11:03.837 に答える
0

I've written a method like that once or twice. It's a bit of a pain. It works very much like parsing a command line in a C program.

I don't remember now where I found the documentation on how to do it. If I remember correctly, it uses functions va_start() and va_end().

A major down-side of that approach is that the comma-delimited list of parameters are not type checked, and don't have labels like they do in normal methods.

The main way it makes sense to use that approach is in a method like NSArray's arrayWithObjects, where you need to allow a variable-sized list of parameters of any type, or NSLog.

于 2012-06-16T22:55:35.923 に答える