iphone - 如何制作一个采用格式化字符串+几个附加参数的宏,就像 NSLog 一样?

标签 iphone objective-c cocoa cocoa-touch

这是练习用的。我尝试构建类似于 NSLog 的东西。目前我有这个:

#define LogThis(info) \
    [[MyLogger sharedLogger] logThis:info];\


- (void)logThis:(NSString*)info {
    fprintf(stderr, [[NSString stringWithFormat:@"  %@\n", info] cString]);
}

目前我能做的就是向它传递一个简单的@"string",但没有像 NSLog 那样的格式和参数。这里的主要优点是我摆脱了 NSLog 产生的所有这些开销。出于学习目的,我想知道如何获取多个参数来制作类似于 NSLog 的内容,以便我可以调用:

LogThis(@"method foo received input value %d", inputValue)

这可能吗?

最佳答案

以下是在 gcc 的 cpp 中定义可变参数宏的方法:

#define LogThis(format, ...) \
    do { printf(format, ## __VA_ARGS__); } while(0)

关于iphone - 如何制作一个采用格式化字符串+几个附加参数的宏,就像 NSLog 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1797164/

相关文章:

iPhone iOS 如何在删除实体时删除从 Core Data 实体嵌套关系引用的本地文件?

objective-c - 由于awakeFromNib时间太长而导致应用崩溃

javascript - 通过 WebScriptObject 从 Objective-C 调用 Javascript

objective-c - 如何在使用 Cocoa NSDirectoryEnumerator 列出目录内容时显示文件或进度?

ios - 如果 for 循环正在运行,则无法按 UIButton

swift - 如何使用 subview 在 Mac OSX 中保存 NSI​​mage?

objective-c - 更新 sqlite3 API

iphone - 在自定义 UITableViewCell 中调整 UIImageView 的大小会产生不一致的结果

iphone - 隐藏所有包含的 View 通过使父 UiView 的高度为 0

iPhone - 设备转动时禁止 UIView 旋转