我在Apple文档中读到,我们可以在目标c方法调用中使用可选参数。来自Apple文档的示例:
接受可变数量参数的
方法也是可能的,尽管它们比较少见。额外的参数在方法名称结束后用逗号分隔。(与冒号不同,逗号不被视为名称的一部分。)在下面的示例中,向假想的makeGroup:方法传递了一个必需参数(组)和三个可选参数:
[receiver makeGroup:group, memberOne, memberTwo, memberThree];有人能告诉我们什么时候使用这个功能吗?Apple中有什么例子吗?
谢谢
发布于 2012-06-16 22:11:03
您所描述的方法的类型称为变量方法。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-16 22:55:35
我写过一两次这样的方法。有点疼。它的工作原理非常类似于分析C程序中的命令行。
我现在不记得我在哪里找到了关于如何做它的文档。如果我没记错,它使用的是函数va_start()和va_end()。
这种方法的一个主要缺点是,以逗号分隔的参数列表不进行类型检查,并且没有像在正常方法中那样有标签。
使用这种方法的主要方法是在像NSArray的arrayWithObjects这样的方法中,您需要允许任意类型的参数或NSLog的可变大小的列表。
https://stackoverflow.com/questions/11067358
复制相似问题