可能重复:
为什么某些可可方法中的参数列表以 nil 结尾?
当我定义这样的方法时,我必须放一个 nil/NULL/0 来指示这些变量参数的结束,如何stringWithFormat:
实现这样不需要这样做?
可能重复:
为什么某些可可方法中的参数列表以 nil 结尾?
当我定义这样的方法时,我必须放一个 nil/NULL/0 来指示这些变量参数的结束,如何stringWithFormat:
实现这样不需要这样做?
因为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 之间的正数)。
从技术上讲,我想您也可以将它们组合起来(例如对组进行计数,每个组都有一个哨兵值),但我还没有看到它经常在野外使用。