3

このようなメソッドがあるとします

+ (NSString *)stringWithObject:(id)object format:(NSString *)format
{
    NSString *string = [NSString stringWithFormat:format, object];

    NSLog(@"%@", string);

    return string;
}

objectパラメーターは決してありませんnilが、メソッドに渡されるフォーマット引数は次のいずれかである可能性があります

NSString *formatWithPlaceholder = @"object: %@"

また

NSString *formatWithoutPlaceholder = @"No object";

がフォーマット引数としてメソッドに渡された場合formatWithoutPlaceholder、コンソール出力は正しく、警告やエラーはありませんが、これにより他の問題が発生しますか? このような使用法には何か問題があるように感じstringWithFormat:ます。

4

1 に答える 1

5

フォーマット文字列のフォーマット指定子が、指定されたパラメーターの数よりも少ない場合、悪いことは何も起こりません: コードは両方のフォーマット文字列に対して有効です。

ただし、逆の状況 (パラメーターよりも多くのフォーマット指定子) が発生すると、未定義の動作が発生します。

于 2014-03-22T23:59:02.680 に答える