Objective-C可变参数方法的定义和使用

来源:互联网 发布:天猫和淘宝质量一样吗 编辑:程序博客网 时间:2024/06/05 02:52

1,Demo

<pre name="code" class="objc">#import <stdarg.h>//1,导入这个头文件- (int)VariableParameter:(NSString *)str,...NS_REQUIRES_NIL_TERMINATION    //2,参数列表这样写{    va_list varList; //3,定义va_list类型的变量    NSString *temp;    int num = 0;        if (str == nil) {        return num;    }        va_start(varList, str); //4,开始开始标志,第一个参数是va_list类型的变量,用于存储参数的数组,第二个参数是参数列表中的第一个参数    while ((temp = va_arg(varList, NSString *)) != nil) { //5,循环从数组中取出来并判断是不是为空,最后一个为空        NSLog(@"%@", temp);        num++;    }    va_end(varList);//6,关闭varList指针        return num;}

2,注意事项和基本使用

可变参数的限制:

1)参数列表中不能只有可变参数

2)可变参数必须出现在参数列表的最后

3)可变参数的类型必须由程序管理

就是说,调用可变参数的方法的时候,不能没有任何参数,要至少有一个变量。可变参数变量不能出现在参数列表的中间位置,只能出现在参数列表的最后。调用时候参数列表中允许出现不同类型的参数,但是程序要保证类型的正确性。

定义可变参数的方法或者函数的时候要引入头文件 stdarg.h .  用 ... 表示可变参数,获取可变参数之前要定义一个 va_list 类型的变量。

使用方法:

va_list pvar;.......va_start(pvar, 可变参数前面的一个变量名);.......f = va_arg(pvar, 类型名);.......va_end(pvar);


va_start() 为访问可变参数进行准备。

va_arg() 获取可变参数的值,执行的时候能够获得下一个变量的值。第二个参数是要获取的值得类型,这个类型不一定都一样。

va_end() 获取参数完成之后,调用这个来关闭pvar指针, va_start 和 va_end 都是成对出现的。


可变参数一般都是以NULL或者nil结尾,在使用的时候经常出现忘记加NULL的情况。这个问题可以通过在方法或者方法声明的结尾加上宏定义NS_REQUIRES_NIL_TERMINATION 。加上之后,编译时候如果发现忘记NULL就会提示警告。

0 0
原创粉丝点击