实现多个形参的方法
#import <Foundation/Foundation.h>
@interface VarArgs :NSObject
//带有多个形参 逗号+三个点 ,...
//可变形参的声明;
- (void)test:(NSString *)name,...;
@end
#import "VarArgs.h"
@implementation VarArgs
- (void)test:(NSString *)name, ...
{
//定义一个va_list指针变量argList,指向可变参数的列表
va_list argList;
// va_list一个类型,定义指向可变参数列表的指针变量
if(name)
{//如果第一个参数name存在,才需要处理后面的参数
//name参数不在可变参数的列表中,因此需要先处理name参数
NSLog(@"%@",name);
//va_start(<#ap#>, <#param#>)一个函数 该函数指定开始处理可变形参的列表,并让指针变量指向可变形参列表的第一个参数;
va_start(argList, name);//让arglist指向第一个可变参数列表的第一个参数,开始提取可变参数列表的参数;
//va_arg(argList, id)用于提取arglist指针当前指向的参数,并将指针移动指向下一个参数。
//arg变量用于保存当前获取的参数,如果参数不为nil进入循环体
NSString *arg = va_arg(argList,id);
//va_arg(<#ap#>, <#type#>)该函数分返回获取指针当前指向的参数的值,并将指针移动到指定下一个参数
while (arg) {
//打印出每一个参数;
NSLog(@"%@",arg);
arg=va_arg(argList, id);
//再次提取下一个参数,并将指针移动到指向下一个参数;
}
va_end(argList);//释放arglist指针,结束提取;
//va_end(<#ap#>) 结束处理可变形参,释放指针变量。
}
}
@end
#import <Foundation/Foundation.h>
#import "VarArgs.h"
int main(int argc,const char * argv[])
{
@autoreleasepool {
//个数可变的形参只能位于形参列表的最后,且一个方法最大只能包含一个长度可变的形参;
VarArgs * var = [[VarArgsalloc]init];
[var test:@"C语言程序设计",@"objective-c程序设计",@"UI",@"网络",@"项目",@"毕业",@"月薪上万!你还在等什么,奋斗吧少年!",nil];
}
return 0;
}