- /***********
- * 今天进行了“形参个数可变的方法”的学习.收获如下:
- *
- * 1. 形式:-(返回值) 方法名:(参数类型* ) name,...
- *
- * 2. 获取个数可变的行参,需要4个关键字:va_list, va_start, va_end, var_arg
- * va_list: 这是一个类型,用于定义一个指针变量(指向可变的行参列表)
- * va_start: 这是一个函数,接收行参列表和第一个行参
- * va_end: 结束处理可变行参,释放va_list型指针变量
- * var_arg: 该函数去处当前指向的对象,并将指针指向下一个对象
- *
- *
- Date: 2015/5/8
- ************/
- #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: @"我是李炎",@"23岁",@"至今未婚哈哈哈",nil];
-
- }
- return 0;
- }
复制代码 |
|