前言
在我们使用的苹果公司提供的API中,有很多的API是只有一个参数但可以传递很多值。这个参数我们暂且称它为不定长参数。
例如在UIAlertView
、UIActionSheet
中不定长参数最为常见。
使用示例
今天我们来说下怎么使用自定义不定长参数,先看一个不定长参数的方法例子,上代码。
//方法定义和实现
- (void)updateDataWithAllNmae:(NSString *)string,...NS_REQUIRES_NIL_TERMINATION
{
va_list args;
va_start(args,string);
if (string) {
NSLog(@"string : %@",string);
NSObject * other;
while((other = va_arg(args,NSObject *))) {
NSLog(@"other : %@",other);
}
}
va_end(args);
}
//方法调用方式
[self updateDataWithAllNmae:@"张三",@"李四",@"王五",nil];
非常需要注意
1、多个参数时,所有参数均用逗号隔开。
2、调用的时候必须要以nil结束,否则会crash掉。
命令行的详细描述
语法命令 | 具体含义 |
---|---|
va_list | 用来保存宏va_start、va_arg和va_end所需信息的一种类型 |
va_start | 访问变长参数列表中的参数之前使用的宏,它初始化用va_list声明的对象,初始化结果供宏va_arg和va_end使用 |
va_arg | 展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用 va_arg 都会修改,用 va_list 声明的对象从而使该对象指向参数列表中的下一个参数 |
va_end | 该宏使程序能够从变长参数列表用宏va_start引用的函数中正常返回 |
NS_REQUIRES_NIL_TERMINATION | 用于编译时非nil结尾的检查 |