我在Apple文档中读到,我们可以在Objective c方法调用中使用可选参数。 Apple文档中的示例:
采用可变数量参数的方法也是可能的, 虽然它们有点罕见。额外参数以逗号分隔 方法名称结束后。 (与冒号不同,逗号不是 被认为是名称的一部分。)在下面的例子中,虚构 makeGroup:方法传递一个必需参数(组)和三个 可选的参数:
[receiver makeGroup:group, memberOne, memberTwo, memberThree];
有人能说出何时使用此功能以及如何使用? Apple API中有任何示例吗?
感谢
答案 0 :(得分: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];
}
答案 1 :(得分:0)
我写过一次或两次的方法。这有点痛苦。它非常类似于在C程序中解析命令行。
我现在不记得我在哪里找到了如何做的文档。如果我没记错的话,它使用函数va_start()和va_end()。
该方法的主要缺点是逗号分隔的参数列表未经过类型检查,并且没有像普通方法那样的标签。
使用该方法的主要方法是在NSArray的arrayWithObjects之类的方法中,您需要允许任意类型的参数的可变大小列表,或NSLog。