我NSLog
在以下块的调用中收到警告"格式不是字符串文字而没有格式参数" :
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog([NSString stringWithFormat:@"%d", buttonIndex]);
}
Run Code Online (Sandbox Code Playgroud)
我在这里的另一篇文章中读到这个错误消息表明使用不安全NSLog
.有人能指出我正确格式化字符串的方向吗?
all*_*tom 11
从技术上讲,它在您的情况下是一个无效警告,但它告诉您NSLog的格式字符串不是硬编码的,可能是安全性/稳定性问题.修复很简单:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"%d", buttonIndex);
}
Run Code Online (Sandbox Code Playgroud)
如果你很好奇,我的意思是安全性/稳定性问题就是这个.在我的示例中,格式字符串NSLog
是常量:@"%d"
,并且您知道在编译它NSLog
时期望传递单个整数.当你打电话NSLog
一样NSLog([obj makeSomeString])
,你真的不知道在编译时的格式字符串是什么,或者有多少/哪种类型的参数应该遵循.如果在运行时字符串结果是"%d %d %@"
,它将很乐意从堆栈中读取两个整数和一个NSObject,无论是否有任何对象实际放在那里.这是它警告你的问题.
在您的情况下警告无效,因为您生成的字符串格式为%d,因此它永远不应包含%
会导致此问题显示的字符.
归档时间: |
|
查看次数: |
7719 次 |
最近记录: |