定义一个宏来替换代码

时间:2013-02-21 10:13:39

标签: ios objective-c macros c-preprocessor testflight

我正在使用TestFlight,我已经有了这个宏来替换NSLog的TestFlight远程日志记录等价物。

 #define NSLog(__FORMAT__, ...) TFLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

我刚刚从TestFlight网站上复制粘贴了这个,现在我想创建一个我自己的用途略有不同。

我希望能够输入...

MyEventLog(@"Something happened.");

......并将其解释为......

[[MyEventLogManager sharedInstance] newLogWithText:@"Something happened"];

我只是不确定语法是如何工作的。

2 个答案:

答案 0 :(得分:4)

#define MyEventLog(message) [[MyEventLogManager sharedInstance] newLogWithText:message]

但是,您会发现提供该方法的varargs版本很有用,因此您可以传递格式化文本:

- (void)newLogWithFormat:(NSString *)format, ...
{
    va_list va;
    va_start(va, format);
    NSString *message = [[NSString alloc] initWithFormat:format arguments:va];
    va_end(va);

    [self newLogWithText:message];

    // If not using ARC, then:
    // [message release];
}

并使用:

#define MyEventFormat(__FORMAT__, ...) [[MyEventLogManager sharedInstance] newLogWithFormat:__FORMAT__, ##__VA_ARGS__]

答案 1 :(得分:1)

你可以查看我的LoggingEngine,我使用类似的东西。

#define PBLog(s,...) [PBLog logFile:__FILE__ withLineNumber:__LINE__ andFormat:(s), ##__VA_ARGS__]

在这里,您可以看到我调用方法[PBLog logfile:withLineNumber:andFormat:]

https://github.com/nerdishbynature/PBLog