首先介绍下VA_LIST,VALIST是C语言中解决变参问题的一组宏,在头文件<stdarg.h>中。
在平常我们会为了让代码更加的简洁可扩展,我们定义的方法或者函数的参数的不定的,所以,VA_LIST可以很好的解决这个问题,废话少说,上代码:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *array = [selftest:@"test1",@"test2",@"test3",nil];
NSLog(@"%@",array);
}
-(NSMutableArray *)test:(NSString *)p1,...
{
NSMutableArray *array = [NSMutableArrayarray];
// 定义一具VA_LIST型的变量,这个变量是指向参数的指针
va_list list;
id tag;
// 用VA_START宏初始化刚定义的VA_LIST变量
va_start(list, p1);
// VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型,如果函数有多个可变参数的,依次调用VA_ARG获取各个参数
while ((tag = va_arg(list, id))) {
[array addObject:tag];
}
// 用VA_END宏结束可变参数的获取
va_end(list);
return array;
}
@end
打印结果如下:
可见,打印出的传递的除第一个参数之外的参数,这样,我们可以在test方法中根据参数的不同而处理不同的业务逻辑。