ios开发-Object-C可变参数函数

这个函数主要是用来计算用户传进来的数值之和。

- (int)sum:(int)num, ...
{ 
      int result = num; 
      int objNum; 
      va_list arg_list;
      va_start(arg_list, num);
      while ((objNum = va_arg(arg_list, int))) 
      { 
            result += objNum;
      } 
      va_end(arg_list); 
      return result;
}

va_list:用来保存宏 va_start 、va_arg 和 va_end 所需信息的一种类型。为了访问变长参数列表中的参数,必须声明 va_list 类型的一个对象。

va_start:访问变长参数列表中的参数之前使用的宏,它初始化用 va_list 声明的对象,初始化结果供宏va_arg和va_end使用;

va_arg:展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用 va_arg 都会修改,用 va_list 声明的对象从而使该对象指向参数列表中的下一个参数。

va_end:该宏使程序能够从变长参数列表用宏 va_start 引用的函数中正常返回。

使用方法

使用方法也很简单,在可变参数里,所有参数均用逗号隔开。

NSLog(@"%d", [self sum:1, 34, nil]);

注意事项

使用的时候,可变参后最后面加一个nil值,这样是代表结束的意思。就像UIAlertView初始化的那样,它一开始不知道你有多少个Button,你可以自由地往里加Button,最后也是由一个nil结束,所以两个是一样的道理。

注意点

1)当我们要创建一个可变参数函数时,必须把省略号( ... )放到参数列表后面,同时也只能拥有一个这样的格式,因为我们不能定义两个可变的参数。

2)当我们需要读取 可变参数列表 时,必须先指定一个变数 va_list ,然后使用宏 va_start 、va_arg、va_end 来获取。

推荐阅读更多精彩内容