想必在iOS这行混过一段时间的人看到下面的代码都会很熟悉


我们今天要讨论的就是这个方法最后边的可变参数列表的使用。这个方法内部到底是如何实现的呢?以及这样提供函数调用的好处又有哪些呢?接下来,我们慢慢研究下

1.首先,苹果这么做,肯定是有它这么设计的原因。相比于最后一个参数换为数组,可变参数列表的形式更加直观,可读性强!此外,相对于只能传递一个参数的方法,可变参数列表参数又提供了扩展性,基于此,很有必要去研究下可变参数列表的使用了。
2.其次,iOS实现可变参数列表的关键点是什么?关键在于va_list。va_list是C语言提供的处理可变参数的一种方法。具体的注意事项如下

1.首先在函数里面定义va_list的变量,这个变量是指向参数的指针。
2.然后用va_start初始化刚定义的va_list变量。
3.然后用va_arg返回可变的参数,va_arg的第二个参数是返回的参数类型,例如va_arg(args,NSString *),va_arg每调用一次就会指向下个参数的地址,直到再也没有获取到参数为止。
4.最后用va_end宏结束可变参数的获取。

下面,用一个demo来具体演示下如果使用可变参数列表声明、定义函数


Tips

1.函数调用的时候,最后一个参数后面一定要加nil,我们也在函数声明的定义用编译器去做了属性声明,要求最后一个参数传递nil进去,否则会crash。
2.函数传递的参数类型要求是相同数据类型,要传字符串都传字符串,要传数字都传数字,否则也会有问题。
今天主要就对这个进行一个小小的总结,总结这个题材会做多少期,目前我个人也不知道,等哪天总结的差不多了,也许就停下来了吧。嘿嘿!