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

Car*_*loS 2 objective-c ios

可能重复:
为什么某些可可方法中的参数列表以nil结尾?

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

pax*_*blo 11

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

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

首先要事先告诉我有多少个参数,无论是长度还是类似格式字符串.这方面的例子是:

int arr[] = {6, 3, 1, 4, 1, 5, 9};
//           ^
//           |
//           +--- number of elements following.
Run Code Online (Sandbox Code Playgroud)

要么:

NSString *message = [NSString stringWithFormat: @"Your age is %d", age];
//                                                            ^
//                                                            |
//                                 only one format element ---+
Run Code Online (Sandbox Code Playgroud)

第二个是哨兵价值,比如你nil/NULL/0最后的价值:

int arr[] = {3, 1, 4, 1, 5, 9, -1};
//                              ^
//                              |
//         marks end of data ---+
Run Code Online (Sandbox Code Playgroud)

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

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