iOS 使用不定长参数传递参数

前言

在我们使用的苹果公司提供的API中,有很多的API是只有一个参数但可以传递很多值。这个参数我们暂且称它为不定长参数。
例如在UIAlertViewUIActionSheet中不定长参数最为常见。

使用示例

今天我们来说下怎么使用自定义不定长参数,先看一个不定长参数的方法例子,上代码。

//方法定义和实现
- (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结尾的检查

你可能感兴趣的:(iOS 使用不定长参数传递参数)