可能重复:
Why do parameter lists in certain cocoa methods end with a nil?
当我定义这样的方法时,我必须输入一个nil / NULL / 0来表示这些变量参数的结束,如何实现stringWithFormat:
以便不需要这样做?
答案 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之间的正数)。
从技术上讲,我猜你也可以将它们组合起来(例如每组具有哨兵值的组数),但我没有经常在野外使用过。