------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
/***********
* 今天进行了“形参个数可变的方法”的学习.收获如下:
*
* 1. 形式:-(返回值) 方法名:(参数类型*) name,...
*
* 2. 获取个数可变的行参,需要4个关键字:va_list, va_start, va_end, var_arg
* va_list: 这是一个类型,用于定义一个指针变量(指向可变的行参列表)
* va_start: 这是一个函数,接收行参列表和第一个行参
* va_end: 结束处理可变行参,释放va_list型指针变量
* var_arg: 该函数去处当前指向的对象,并将指针指向下一个对象
*
*
************/
代码实现:
#import <Foundation/Foundation.h>
/*************************** 定义 *****************************/
/**/@interface VarArgs:NSObject
/**/
/**/-(void) test:(NSString* )name,...; //定义了一个形参个数可变的方法
/**/
/**/@end
/******************************************************************/
/*************************** 实现 *******************************/
/**/@implementation VarArgs
/**/
/**/-(void)test:(NSString *) name,...
/**/{
/**/ va_list argList; //定义了一个指针变量argList,指向行参列表
/**/ if(name) //第一个参数存在,才需要处理后面的参数
/**/ {
/**/ NSLog(@"%@",name); //name是不在列表中的,须先处理name
/**/ va_start(argList, name); //向va_start函数传入(行参列表,第一个行参)
/**/ NSString* arg = va_arg(argList, id); //arg用于存储参数,如果不为nil 进入循环
/**/ while(arg)
/**/ {
/**/ NSLog(@"%@",arg); //打印
/**/ arg = va_arg(argList, id); //去处参数,并将指针移到下一个
/**/ }
/**/ va_end(argList); //结束并释放指针变量
/**/ }
/**/}
/**/@end
/******************************************************************/
int main(int argc, const char * argv[])
{
@autoreleasepool
{
VarArgs* va = [[VarArgs alloc] init];
[va test: @"呵呵",@"哈哈",@"喔哈哈",nil];
}
return 0;
}