Jam*_*sev 7 syntax objective-c error-checking
Xcode看着这条线并没有抱怨.项目构建,代码在运行时崩溃.
NSString *randomName = [NSString stringWithFormat:@"%@, %@, %@",
[randomAjectiveList objectAtIndex:ajectiveIndex],
[randomNounList objectAtIndex:nounIndex]];
Run Code Online (Sandbox Code Playgroud)
当然,来考虑它,我有一个太多" %@"到位,一个更实际的论点.正确的代码应如下所示
NSString *randomName = [NSString stringWithFormat:@"%@, %@",
[randomAjectiveList objectAtIndex:ajectiveIndex],
[randomNounList objectAtIndex:nounIndex]];
Run Code Online (Sandbox Code Playgroud)
我问你,但是为什么Xcode没有抱怨?看起来像param计数器这样显而易见的事情.不应该在编译时检查这个吗?是否特定于" %@"?
请指教.
基于快速检查,您100%正确,在编译时不会检查,即使是静态分析器也是如此.相反,检查NSLog.所以在我的机器上,使用XCode 4.0.2,以下内容:
[NSString stringWithFormat:@"%d %@ %@"];
NSLog(@"%d %@ %@");
Run Code Online (Sandbox Code Playgroud)
在NSLog上生成"比'数据参数"更多'%'转换的警告,但未对NSString发表评论.
因此,差异可能是固定功能调用与动态调用.编译器实际上无法完全确定NSString调用将在何处进行,因为您可能已经声明了类别或使用低级运行时在运行时调整NSString选择器表.
但是,特别是考虑到如果你开始修改基础类的行为,你几乎会立即遇到的问题,就像你一样,我预计至少会有一个警告.
| 归档时间: |
|
| 查看次数: |
2211 次 |
| 最近记录: |