我在NSLog线上得到了警告

Format string is not a string literal(potentially insecure)

从下面的代码

NSMutableString  *MarqueeMessage = [[NSMutableString alloc]init];
[MarqueeMessage appendString:@"Abc"];
NSString *immutableString = MarqueeMessage;
NSLog(immutableString);

我可以问一下为什么在我把这行代码改成下面的代码后,警告就消失了吗?

NSLog(immutableString,nil);

推荐答案

这只是编译器的表达方式,"嘿,你真的知道你在做什么吗?"编译器担心输入字符串可能包含%个字符,而您尚未指定相应的参数.显然,根据您提供的代码,情况并非如此,但编译器还不够聪明,无法解决这个问题.

通过添加一个参数(可以是任何东西,包括数字、字符串或nil),您可以让编译器相信您知道自己在做什么.另一种让编译器满意的方法是用这样的代码输出字符串.

NSLog( @"%@", immutableString );

这种方法的优点是字符串中意外的格式说明符(例如%s)不会导致任何问题.

Objective-c相关问答推荐

如何判断 iPhone 现在在哪个位置(横向或纵向)?

警告:格式字符串不是字符串文字(可能不安全)

Objective C for循环中断并继续

如何使用键值编码判断对象是否存在键?

如何在 iOS SDK 中使用语音识别?

Objective-C 方法中的静态变量是否跨实例共享?

.m 文件中的空@interface 声明是做什么用的?

Objective-C 中的 const 与静态 NSStrings

滚动后检测 UITableView 中的当前顶部单元格

如何删除应用程序指定目录中的所有文件?

从 UIScrollView 中删除所有子视图?

Grand Central Dispatch (GCD) 与 performSelector - 需要更好的解释

添加自定义 initWith?

Xcode 7 UI 测试:如何在代码中消除一系列系统alert

如何判断数组是空还是空?

当 UIView 框架更改时,视图内的 AVPlayer 层不会调整大小

Instruments Allocations 跟踪用户定义类的对象的分配和解除分配

使用 UINavigationController 在 UIPageViewController 中下推内容

iPhone:如何确定线程是否是主线程?

如何阻止 NSNotification 中的观察者调用两次?