そのようなメソッドを定義するとき、それらの変数引数の終わりを示すために nil/NULL/0 を配置するstringWithFormat:
必要がありますが、そうする必要がないようにどのように実装されていますか?
質問する
901 次
1 に答える
11
stringWithFormat:
フォーマット自体を使用して、必要な引数の数を把握するためです。
これを行う基本的な方法は 2 つあります (可変引数リストを処理します)。
まず、長さまたはフォーマット文字列のような引数の数を事前に通知する必要があります。これの例は次のとおりです。
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
2 番目は、末尾のyour などのセンチネル値です。
int arr[] = {3, 1, 4, 1, 5, 9, -1};
// ^
// |
// marks end of data ---+
さて、明らかに、センチネル法は、実際のデータとセンチネル値を区別できる場合にのみ機能します (PI の桁はすべて 0 から 9 までの正の数であるため、上記の場合は簡単です)。
技術的には、それらを組み合わせることもできると思いますが (各グループにセンチネル値を持つグループの数など)、実際に使用されていることはあまりありません。
于 2012-04-08T02:56:45.363 に答える