您的位置:首页 > 其它

小糖出品:对方法的补充(1)

2015-05-29 23:39 197 查看
上篇博客,小糖说到了方法的定义和实现。这篇博客小糖对上篇的内容进行一些补充。

上篇博客说到了定义方法时,传入的参数个数,上篇说到了传入一个参数和两个参数时的声明格式,现在小糖来说说另一种情况,传入多个参数的情况。

假设你有这种需求,在写一个方法的时候需要向方法中传入许多参数,而且是至少一个以上的任意个数,那么我们该怎么办呢?小糖来说说自己对定义这种方法的理解。首先,小糖先来说说方法声明部分,声明部分跟之前的有些许区别。比如我们要写一个test方法,那么声明部分的格式如下:

- (void) test:(NSString *) name,...;

在test方法中,我们声明了一个NSString *的形参,这个形参除了可以传name之外,还可以传其他参数,需要说明的是,要定义可传多个形参的方法,需要在定义方法的同时,在最后一个形参名后增加逗号和三点(,...),这样说明了该形参可以接受多个参数值。需要注意的是,这样定义出方法只能传入多个相同类型的参数,无法传入参数类型不同的参数,所以在用的时候需要注意下。

在进行方法实现之前,小糖需要说明几个关键字的作用,只有使用这几个关键字,才能实现该方法。首先来讲第一个关键字:

va_list,这东西是什么呢?这个东西其实是一个类型,就好比如NSString 、int 、float一样,它是用来定义指向可变参数列表的指针变量,什么意思呢?就是定义了一个指针,这个指针指向了你在test:后面传入的形参的列表,其实就是将所有传入的形参弄成一个列表,然后让该指针指过去的意思。

接下来是第二个关键字:va_start,这又是什么东西呢?这个东西跟第一个va_list就不一样了,其实我们可以从名字看出来的,就像第一个中的list一样,start其实就是表示开始的意思,va_start其实是一个函数,这个函数指定一个需要处理的可变形参的列表,并且让指针变量指向可变形参列表的第一个参数。

接下来说的是va_end,顾名思义,就是结束的函数,结束处理可变形参,释放指针。

最后一个关键字是va_arg,这个也是一个函数,它的作用就是返回获取指针当前指向的参数的值,并将指针移动到下一个参数。

说了这么多,我们还是得用例子来理解。比如说,我想在某个类中定义一个可变参数的方法,该怎么声明呢?



像上面一段代码一样,我们声明了一个test方法,而且该方法是形参个数可变的方法。该方法的实现部分如下:



利用上面介绍的几个关键字来实现该方法,接下来就可以在main中创建对象调用该方法了,如下



运行结果如下



这样我们就可以实现传入多个参数了。

其实,小糖觉得,整个过程主要是那几个关键字的使用不怎么好理解,其他嘛,都是很好理解的。具体感受,那得看个人咯。

好了,对方法的补充暂时先讲到这里,下一篇博客小糖会继续对方法进行补充的,希望大家能继续关注哦。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: