为什么 - [NSString stringWithFormat:]不需要nil来指示参数的结束?

时间:2012-04-08 02:54:22

标签: objective-c ios

  

可能重复:
  Why do parameter lists in certain cocoa methods end with a nil?

当我定义这样的方法时,我必须输入一个nil / NULL / 0来表示这些变量参数的结束,如何实现stringWithFormat:以便不需要这样做?

1 个答案:

答案 0 :(得分:11)

因为stringWithFormat:使用格式本身来确定它需要多少个参数。

有两种基本方法(处理变量参数列表)。

首先要提前告诉我有多少个参数,无论是长度还是类似格式字符串。例如:

int arr[] = {6, 3, 1, 4, 1, 5, 9};
//           ^
//           |
//           +--- number of elements following.

或:

NSString *message = [NSString stringWithFormat: @"Your age is %d", age];
//                                                            ^
//                                                            |
//                                 only one format element ---+

其次是哨兵价值,例如最后的nil/NULL/0

int arr[] = {3, 1, 4, 1, 5, 9, -1};
//                              ^
//                              |
//         marks end of data ---+

现在,显然,只有在能够区分真实数据和哨兵值时才能使用哨兵方法(在上述情况下很容易,因为PI的数字都是0到9之间的正数)。

从技术上讲,我猜你也可以将它们组合起来(例如每组具有哨兵值的组数),但我没有经常在野外使用过。