zoukankan      html  css  js  c++  java
  • Objective-C实现变参函数

    原文:http://www.tanhao.me/pieces/1104.html
     
    NSLog(NSString *format, ...)
     
    + (id)arrayWithObjects:(id)firstObj, ...
     
    + (id)dictionaryWithObjectsAndKeys:(id)firstObject , ...
     
    需要用到C语言中关于变参的一组宏:va_start,va_arg,va_end
     
    函数调用:[self method:@"1",@"2",@"3",nil];像大多数变参函数一样,未尾一定要加上nil,因为这一组宏都没有提供对参数个数的检测,当然你 可以会问为何NSLog的参数中我们都不用在末尾添加nil的参数呢,那是因为NSLog的第一个参数是一个格式化字符串,通过这个字条串就能获得后面的 参数个数,所以如果你的函数还能有其它的参数能够显式的指出变参个数,当然你也可以书写(但在函数体中需要修改为按已知个数调用va_arg)。
     
     
     1 - (void)method:(NSString *)value,...
     2 {
     3     //指向变参的指针
     4     va_list list;
     5     //使用第一个参数来初使化list指针
     6     va_start(list, value);
     7     while (YES)
     8     {
     9         //返回可变参数,va_arg第二个参数为可变参数类型,如果有多个可变参数,依次调用可获取各个参数
    10         NSString *string = va_arg(list, NSString*);
    11         if (!string) {
    12             break;
    13         }
    14         NSLog(@"%@",string);
    15     }
    16     //结束可变参数的获取
    17     va_end(list);
    18 }
  • 相关阅读:
    bzoj2101:[USACO2010 DEC]TREASURE CHEST 藏宝箱
    P3976 [TJOI2015]旅游(未完成)
    洛谷 P 5 3 0 4 [GXOI/GZOI2019]旅行者
    NOIP原题 斗地主(20190804)
    P2860 [USACO06JAN]冗余路径Redundant Paths
    vue中的插槽(slot)
    vue动态绑定class
    发现一个ps抠毛发简单快捷高质量的方法
    propsData传递数据
    sort排序原理
  • 原文地址:https://www.cnblogs.com/hbf369/p/3303410.html
Copyright © 2011-2022 走看看