小糖出品:对方法的补充(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,这个也是一个函数,它的作用就是返回获取指针当前指向的参数的值,并将指针移动到下一个参数。
说了这么多,我们还是得用例子来理解。比如说,我想在某个类中定义一个可变参数的方法,该怎么声明呢?
![](http://img.blog.csdn.net/20150530003606188?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVsNzQwMzA2NjE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
像上面一段代码一样,我们声明了一个test方法,而且该方法是形参个数可变的方法。该方法的实现部分如下:
![](http://img.blog.csdn.net/20150530003520636?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVsNzQwMzA2NjE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
利用上面介绍的几个关键字来实现该方法,接下来就可以在main中创建对象调用该方法了,如下
![](http://img.blog.csdn.net/20150530003852983?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVsNzQwMzA2NjE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
运行结果如下
![](http://img.blog.csdn.net/20150530003805925?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVsNzQwMzA2NjE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这样我们就可以实现传入多个参数了。
其实,小糖觉得,整个过程主要是那几个关键字的使用不怎么好理解,其他嘛,都是很好理解的。具体感受,那得看个人咯。
好了,对方法的补充暂时先讲到这里,下一篇博客小糖会继续对方法进行补充的,希望大家能继续关注哦。
上篇博客说到了定义方法时,传入的参数个数,上篇说到了传入一个参数和两个参数时的声明格式,现在小糖来说说另一种情况,传入多个参数的情况。
假设你有这种需求,在写一个方法的时候需要向方法中传入许多参数,而且是至少一个以上的任意个数,那么我们该怎么办呢?小糖来说说自己对定义这种方法的理解。首先,小糖先来说说方法声明部分,声明部分跟之前的有些许区别。比如我们要写一个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中创建对象调用该方法了,如下
运行结果如下
这样我们就可以实现传入多个参数了。
其实,小糖觉得,整个过程主要是那几个关键字的使用不怎么好理解,其他嘛,都是很好理解的。具体感受,那得看个人咯。
好了,对方法的补充暂时先讲到这里,下一篇博客小糖会继续对方法进行补充的,希望大家能继续关注哦。
相关文章推荐
- CodeIgniter的一些实践
- Alvin
- Android中的事件传递和消费机制
- BASH
- 5.6.3.5 字符串的大小写转换
- UESTC_摩天轮 2015 UESTC Training for Dynamic Programming<Problem K>
- CodeForces 542D. Superhero's Job 暴力数论
- bootstrap学习笔记一: bootstrap初认识,hello bootstrap(下)
- UESTC_男神的约会 2015 UESTC Training for Dynamic Programming<Problem J>
- VS编译SQLite
- <04>VIM编辑器的使用和源码编译安装
- Fields in python
- 《超体》观后感
- UESTC_邱老师选妹子(二) 2015 UESTC Training for Dynamic Programming<Problem I>
- 杭电里面水题的RPG问题
- ubuntu下kdump的使用
- HihoCoder#1052:基因工程
- HihoCoder#1052:基因工程
- UESTC_邱老师选妹子 2015 UESTC Training for Dynamic Programming<Problem H>
- [模拟][NOIP2007] 统计数字