NSLog函数可以传入多个参数,这个就是形参个数可变的方法,定义方法是在最后一个形参名后增加逗号和(…)。
为了在程序中获取个数可变的参数,需要使用如下关键字:
va_list:用于定义指向可变参数列表的指针变量
va_start:该函数指定开始处理可变形惨的列表,并让指针变量指向可变形参列表的第一个参数
va_end:结束处理可变形参,释放指针变量
va_arg:该函数返回获取指针当前指向的参数的值,并将指针移动到指向下一个参数。
-(void)printClass:(NSString*)cName andStus:(NSString*)sName,...{
//使用va_list定义一个argList指针变量,该指针变量指向可变参数列表
va_list argList;
NSLog(@"class=%@",cName);
//如果第一个sName参数存在
if (sName) {
NSLog(@"%@",sName);
//让argList指向第一个可变参数列表的第一个参数
va_start(argList, sName);
//va_arg用于提取argList指针当前指向的参数,并将指针移动到指向下一个参数
//arg变量用于保存当前获取的参数
NSString* arg = va_arg(argList, id);
while (arg) {
NSLog(@"%@",arg);
//再次提取下一个参数,并将指针移动到下一个参数
arg = va_arg(argList, id);
}
va_end(argList);
}
}
测试一下
Student* stu = [[Student alloc]init];
[stu printClass:@"一班" andStus:@"小明",@"小红",@"小灰",@"小兰",nil];
输出:
2014-12-05 20:25:26.138 Blog_01_OC[2587:114588] class=
一班
2014-12-05 20:25:26.138 Blog_01_OC[2587:114588]
小明
2014-12-05 20:25:26.138 Blog_01_OC[2587:114588] 小红
2014-12-05 20:25:26.138 Blog_01_OC[2587:114588] 小灰
2014-12-05 20:25:26.138 Blog_01_OC[2587:114588] 小红
2014-12-05 20:25:26.138 Blog_01_OC[2587:114588] 小灰
2014-12-05 20:25:26.138 Blog_01_OC[2587:114588]小兰