假设我有一个返回BOOL
的方法,如:
+(BOOL) isNewCar {
//returns YES or NO
}
然后我在NSLog
中使用此方法作为:
NSLog("Is my car new, the answer is %@", [MyUtil isNewCar]);
然后我得到编译器警告:
如果我忽略警告并运行,则应用崩溃。
现在我有另一个名为printCar
的方法,它接受变量参数,就像NSLog
的实现一样:
-(void) printCar:(NSString *)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
就像{{1}}那样给我们的自定义方法指定了错误的格式说明符,有没有办法生成警告?
提前致谢!
答案 0 :(得分:3)
是的,你需要NS_FORMAT_FUNCTION
宏才能这样做,如果你按下Command然后点击NSLog
方法,你也可以看到它
void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2)
所以你的方法
-(void) printCar:(NSString *)msg, ...
变为
-(void) printCar:(NSString *)msg, ... NS_FORMAT_FUNCTION(1,2)
您还可以点击NS_FORMAT_FUNCTION
点击查看有关它的更多详细信息