美文网首页
Objective-C 中的可变参数

Objective-C 中的可变参数

作者: 李小争 | 来源:发表于2015-12-28 21:54 被阅读107次

    苹果官方文档 尝试翻译一下.

    Q:我怎样才能写一个像NSString's +stringWithFormat:这样能够携带不定长参数的方法呢?
    像这样携带不定长参数的方法称为可变参数函数.

    请记住,Objective-C方法的实现仅仅是一个代码块,像一个C函数.在stdarg(3)标头档定义了提供可变参数函数使用的宏.在一个函数中,以相同的方式执行,就像他们在普通的方法中一样.

    这是一个Objective-C category 的例子,包含一个可变参数函数,将所有的对象放在一个以nil结尾的参数列表的NSMutableArray的实例.

    Listing 1: 一个典型的可变参数函数

    #import <Cocoa/Cocoa.h>
    
    @interface NSMutableArray (variadicMethodExample)
    
    - (void) appendObjects:(id) firstObject, ...; // This method takes a nil-terminated list of objects.
    
    @end
    
    @implementation NSMutableArray (variadicMethodExample)
    
    - (void) appendObjects:(id) firstObject, ...
    {
    id eachObject;
    va_list argumentList;
    if (firstObject) // The first argument isn't part of the varargs list,
      {                                   // so we'll handle it separately.
      [self addObject: firstObject];
      va_start(argumentList, firstObject); // Start scanning for arguments after firstObject.
      while (eachObject = va_arg(argumentList, id)) // As many times as we can get an argument of type "id"
          [self addObject: eachObject]; // that isn't nil, add it to self's contents.
      va_end(argumentList);
      }
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:Objective-C 中的可变参数

          本文链接:https://www.haomeiwen.com/subject/wbzbhttx.html