我已经看过有关包装NSLog的示例,但我对这些细节并不是100%肯定。
e.g。 #define debugLog(fmt,...) NSLog(@"%@",[NSString stringWithFormat:(fmt), ##__VA_ARGS__]);
这里的论点究竟是什么?
如果我想将常量字符串添加到日志中,例如
- (void) logMessage:(NSString *) message ofType:(NSString *) type
{
NSLog(@"%@ - %@", type, message);
}
我如何在#define宏中创建它?
答案 0 :(得分:4)
debugLog
是一个可变参数宏(采用可变数量的参数)。特定的宏使用2个参数调用NSLog
,第一个是格式字符串(@"%@"
),第二个是stringWithFormat
返回的自动释放字符串,它接受传递的格式字符串和可变参数宏的论据。
__VA_ARGS__
是引用宏中的变量参数列表的方法。它对应于参数列表中的...
。
您可以使用logMessage
宏来实现相同的结果,而不是debugLog
方法:
debugLog("%@ - %@", type, message);
宏本身似乎有点无意义,因为它只包装NSLog
而不添加任何其他内容。
如果您想要一个直接对应logMessage
的宏,那么您根本不需要处理可变参数列表:
#define logMessageAsMacro(message, type) NSLog(@"%@ - %@", message, type)
你必须要小心两个参数是否都是NSString
,因为宏是类型不安全的。