黑马程序员技术交流社区
标题:
如何写行参可变的方法,总结了一下
[打印本页]
作者:
蜡笔小炎
时间:
2015-5-25 03:38
标题:
如何写行参可变的方法,总结了一下
/***********
* 今天进行了“形参个数可变的方法”的学习.收获如下:
*
* 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;
}
复制代码
作者:
hehelaicaicai
时间:
2015-5-25 09:41
看不懂啊,不过这么晚了楼主还没睡,好勤奋
作者:
蜡笔小炎
时间:
2015-5-25 10:33
hehelaicaicai 发表于 2015-5-25 09:41
看不懂啊,不过这么晚了楼主还没睡,好勤奋
一行一行看应该能懂啊,我写的很清晰啊。只是个套路,把它记住照着做就行了
作者:
小龙女的萝卜
时间:
2015-5-25 12:07
受教了,楼主好勤奋,精神值得学习
作者:
白昼那知夜的黑
时间:
2015-5-25 12:58
值得学习
作者:
蜡笔小炎
时间:
2015-5-25 20:48
要沉啊,自己顶一个
作者:
蜡笔小炎
时间:
2015-5-26 11:34
沉了,自己顶
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2