OGeek|极客世界-中国程序员成长平台

标题: ios - 当格式说明符错误地传递给方法时如何发出警告 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 09:16
标题: ios - 当格式说明符错误地传递给方法时如何发出警告

假设我有一个返回 BOOL 的方法,例如:

+(BOOL) isNewCar {
    //returns YES or NO
}

然后我在 NSLog 中使用这个方法:

NSLog("Is my car new, the answer is %@", [MyUtil isNewCar]);

然后我得到编译器警告:

enter image description here

如果我忽略警告并运行,应用程序崩溃。 现在我有另一个名为 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-推荐答案


是的,你需要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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4