Objective c 目标c中的逃逸百分比

Objective c 目标c中的逃逸百分比,objective-c,escaping,Objective C,Escaping,我知道%%方法,但它不起作用:( 使用NSLog NSLog(@"%%5B hello %%5D"); NSLog(@“%5B hello%%5D”); 印刷品 %5B你好%5D 但是使用NSString NSString *str = [NSString stringWithFormat:@"%%5B %@ %%5D",@"hello"]; NSLog(str); NSString*str=[NSString stringWithFormat:@“%%5B%@%%5D”,@“你好”]; NSL

我知道%%方法,但它不起作用:(

使用NSLog

NSLog(@"%%5B hello %%5D"); NSLog(@“%5B hello%%5D”); 印刷品

%5B你好%5D

但是使用NSString

NSString *str = [NSString stringWithFormat:@"%%5B %@ %%5D",@"hello"]; NSLog(str); NSString*str=[NSString stringWithFormat:@“%%5B%@%%5D”,@“你好”]; NSLog(str); 印刷品

5你好68233204


为什么?

您确实需要使用
stringWithFormat:
如果您不想传入任何参数,您应该可以使用

NSString *str = @"%%5B%%5D";
但至于“为什么”,你正在经历的事情正在发生,我不确定……试着传递一个参数,看看它是否仍然发生。当没有传递参数时,可能有一个bug

根据《华盛顿邮报》的说法,你是正确地逃脱了它


表示您也做对了。

您确实需要使用
stringWithFormat:
如果您不打算传入任何参数,您应该能够使用

NSString *str = @"%%5B%%5D";
但至于“为什么”,你正在经历的事情正在发生,我不确定……试着传递一个参数,看看它是否仍然发生。当没有传递参数时,可能有一个bug

根据《华盛顿邮报》的说法,你是正确地逃脱了它


这是因为你遗漏了一行代码。在你的
stringWithFormat:
版本中,你可能有类似

NSString *str = [NSString stringWithFormat:@"%%5B5%%5D"];
NSLog(str);
问题是您现在对字符串中的格式字符进行了双重解释。请记住,
NSLog()
+[NSString stringWithFormat://code>的第一个参数是格式字符串,其中
%
字符被特殊处理。在这两种情况下,您都可以轻松保留字符串的原始版本(并提前去掉重复的%)使用实际的格式字符串,如

NSLog(@"%@", @"%5B%5D");

这是因为您遗漏了一行代码

NSString *str = [NSString stringWithFormat:@"%%5B5%%5D"];
NSLog(str);
问题是您现在对字符串中的格式字符进行了双重解释。请记住,
NSLog()
+[NSString stringWithFormat://code>的第一个参数是格式字符串,其中
%
字符被特殊处理。在这两种情况下,您都可以轻松保留字符串的原始版本(并提前去掉重复的%)使用实际的格式字符串,如

NSLog(@"%@", @"%5B%5D");
谢谢你的回答:),但我想传递一个参数。我更新了我的示例。谢谢你的回答:),但我想传递一个参数。我更新了我的示例。注意:通过NSLog(
NSLog(str);
)调用应该始终使用格式规范:
NSLog(@“%@”,str);
注意:通过NSLog(
NSLog(str)调用;
)应始终使用格式规范:
NSLog(@“%@”,str);