黑马程序员技术交流社区

标题: 如何写行参可变的方法,总结了一下 [打印本页]

作者: 蜡笔小炎    时间: 2015-5-25 03:38
标题: 如何写行参可变的方法,总结了一下
  1. /***********
  2. *   今天进行了“形参个数可变的方法”的学习.收获如下:
  3. *
  4. * 1. 形式:-(返回值) 方法名:(参数类型* ) name,...
  5. *
  6. * 2. 获取个数可变的行参,需要4个关键字:va_list, va_start, va_end, var_arg
  7. *          va_list:    这是一个类型,用于定义一个指针变量(指向可变的行参列表)
  8. *          va_start:   这是一个函数,接收行参列表和第一个行参
  9. *          va_end:     结束处理可变行参,释放va_list型指针变量
  10. *          var_arg:    该函数去处当前指向的对象,并将指针指向下一个对象
  11. *
  12. *
  13. Date: 2015/5/8
  14. ************/
  15. #import <Foundation/Foundation.h>

  16. /***************************   定义  *****************************/
  17. /**/@interface VarArgs:NSObject
  18. /**/
  19. /**/-(void) test:(NSString* )name,...;     //定义了一个形参个数可变的方法
  20. /**/
  21. /**/@end
  22. /******************************************************************/


  23. /***************************  实现  *******************************/
  24. /**/@implementation VarArgs
  25. /**/
  26. /**/-(void)test:(NSString *) name,...
  27. /**/{
  28. /**/    va_list argList;    //定义了一个指针变量argList,指向行参列表
  29. /**/    if(name)        //第一个参数存在,才需要处理后面的参数
  30. /**/    {
  31. /**/        NSLog(@"%@",name);      //name是不在列表中的,须先处理name
  32. /**/        va_start(argList, name);    //向va_start函数传入(行参列表,第一个行参)
  33. /**/        NSString* arg = va_arg(argList, id);    //arg用于存储参数,如果不为nil 进入循环
  34. /**/        while(arg)
  35. /**/        {
  36. /**/            NSLog(@"%@",arg);       //打印
  37. /**/            arg = va_arg(argList, id);  //去处参数,并将指针移到下一个
  38. /**/        }
  39. /**/        va_end(argList);    //结束并释放指针变量
  40. /**/    }
  41. /**/}
  42. /**/@end
  43. /******************************************************************/


  44. int main(int argc, const char * argv[])
  45. {
  46.     @autoreleasepool
  47.     {
  48.         VarArgs* va = [[VarArgs alloc] init];
  49.         
  50.         [va test: @"我是李炎",@"23岁",@"至今未婚哈哈哈",nil];
  51.         
  52.     }
  53.     return 0;
  54. }
复制代码

作者: hehelaicaicai    时间: 2015-5-25 09:41
看不懂啊,不过这么晚了楼主还没睡,好勤奋
作者: 蜡笔小炎    时间: 2015-5-25 10:33
hehelaicaicai 发表于 2015-5-25 09:41
看不懂啊,不过这么晚了楼主还没睡,好勤奋

一行一行看应该能懂啊,我写的很清晰啊。只是个套路,把它记住照着做就行了
作者: 小龙女的萝卜    时间: 2015-5-25 12:07
受教了,楼主好勤奋,精神值得学习
作者: 白昼那知夜的黑    时间: 2015-5-25 12:58
值得学习
作者: 蜡笔小炎    时间: 2015-5-25 20:48
要沉啊,自己顶一个
作者: 蜡笔小炎    时间: 2015-5-26 11:34
沉了,自己顶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2