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

时间:2014-03-22 23:57:04

标签: objective-c nsstring stringwithformat

假设我有这样的方法

+ (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:这样的使用有问题。

1 个答案:

答案 0 :(得分:5)

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

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