方法和可选参数

sam*_*mir 3 objective-c ios

我在Apple文档中读到我们可以在Objective c方法调用中使用可选参数.Apple文档中的示例:

采用可变数量参数的方法也是可能的,尽管它们有点罕见.在方法名称结束后,使用逗号分隔额外参数.(与冒号不同,逗号不被视为名称的一部分.)在下面的示例中,假想的makeGroup:方法传递一个必需参数(组)和三个可选参数:

[receiver makeGroup:group, memberOne, memberTwo, memberThree];
Run Code Online (Sandbox Code Playgroud)

有人能说出何时使用此功能以及如何使用?Apple API中有任何示例吗?

谢谢

rob*_*off 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];
}
Run Code Online (Sandbox Code Playgroud)