当stringWithFormat格式没有类型占位符但有参数时会发生什么

aka*_*lar 3 objective-c nsstring stringwithformat

假设我有这样的方法

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

    NSLog(@"%@", string);

    return string;
}
Run Code Online (Sandbox Code Playgroud)

该object参数是从来没有nil,但传递到方法的format参数可能要么是

NSString *formatWithPlaceholder = @"object: %@"
Run Code Online (Sandbox Code Playgroud)

要么

NSString *formatWithoutPlaceholder = @"No object";
Run Code Online (Sandbox Code Playgroud)

所以如果formatWithoutPlaceholder作为格式参数传递给方法,控制台输出是正确的,没有警告或错误,但这会导致其他问题吗?我觉得这样的用法有点不对劲stringWithFormat:.

das*_*ght 5

当格式字符串的格式说明符少于提供的参数数量时,没有任何不好的事情发生:您的代码对两个格式字符串都有效.

但是,当相反的情况发生时(格式说明符多于参数),您会得到未定义的行为.