假设我有一个返回 BOOL 的方法,例如:
+(BOOL) isNewCar {
//returns YES or NO
}
然后我在 NSLog 中使用这个方法:
NSLog("Is my car new, the answer is %@", [MyUtil isNewCar]);
然后我得到编译器警告:
如果我忽略警告并运行,应用程序崩溃。
现在我有另一个名为 printCar 的方法,它接受变量参数,就像 NSLog 其实现是:
-(void) printCarNSString *)msg, ... {
NSString * contents;
va_list args;
va_start(args, msg);
contents = [[NSString alloc] initWithFormat:msg arguments:args];
va_end(args);
[self writeToFile:contents];
}
当我使用上述方法时:
[self printCar"The car is mine or not : %@", [MyUtil isNewCar]];
编译器不生成警告。此外,应用程序崩溃。
问题:如果像 NSLog 那样为我们的自定义方法提供了错误的格式说明符,有没有办法生成警告??
提前致谢!
Best Answer-推荐答案 strong>
是的,你需要NS_FORMAT_FUNCTION 宏来做到这一点,如果你按Command然后点击NSLog 方法,你也可以看到它
void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2)
你的方法
-(void) printCarNSString *)msg, ...
变成
-(void) printCarNSString *)msg, ... NS_FORMAT_FUNCTION(1,2)
你也可以Command Click NS_FORMAT_FUNCTION 查看更多细节
关于ios - 当格式说明符错误地传递给方法时如何发出警告,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/33099891/
|