ios - 定义一个宏来替换代码

标签 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"];

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

最佳答案

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

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

- (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__]

关于ios - 定义一个宏来替换代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999608/

相关文章:

linux - RPM:从另一个带参数的宏调用带参数的宏

iphone - 如何延迟保存数据?

ios - 试图获取核心数据存储中的总数

ios - 为什么自动布局会出现此布局问题

ios - 使用带有 -fembed-bitcode 的配置和制作构建 C++ 静态库无法链接

ios - 从 UIViewController 访问 UITableViewCell 的属性

c - C 中的内核模块 __init 宏

c - 我们应该使用宏、内联函数还是只使用普通函数并信任编译器?

iphone - 比较 NSNumber 和 NSInteger

ios - 从 NSXMLElement 中获取值