【问题标题】:NSArray creation with variable argument lists使用可变参数列表创建 NSArray
【发布时间】:2010-08-30 16:49:11
【问题描述】:

此数组便捷方法采用逗号分隔的以nil 结尾的对象列表。

myArray = [NSArray arrayWithObjects:aDate, aValue, aString, nil];

nil 的用途是什么?

【问题讨论】:

    标签: objective-c cocoa cocoa-touch arguments nsarray


    【解决方案1】:

    空终止的变量参数列表va_lists,继续遍历参数列表,直到遇到占位符或标记,即nil

    由于该方法无法知道您传递了多少个参数,因此它需要哨兵 (nil) 来告知列表的结束位置。

    【讨论】:

    • 跟进:如果您以某种方式确切地知道用户将传递多少个参数(例如在 NSLog 中,您可以计算第一个字符串中的 % 符号以找出答案) ,您不需要 nil,因为您可以读取与预期一样多的参数。但是,如果无法知道该方法,就像在您的 NSArray 示例中那样,那么必须有一些东西来标记列表的结尾。
    • 没错。由于printf 函数知道预期有多少个参数,因此您不需要空终止。
    • 实际上,您不一定可以通过计算格式字符串中的 %s 来计算参数的数量。存在使用多个参数的格式排列。另请注意,将参数打包到可变参数帧中的规则因参数类型和体系结构而异。解码它们很难。
    • 请注意,我的评论与 Jacob 的正确答案完全正交。更多针对@Amorya。
    【解决方案2】:

    标记对象列表的结尾。

    这是来自CocoaBuilder 的讨论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 2014-01-19
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      相关资源
      最近更新 更多