我在需要遇到的代码库中遇到过类似的事情:
#define TimeStamp [NSString stringWithFormat:@"%d",(int)([[NSDate date] timeIntervalSince1970]) ]
为什么会有人这样做,而不是在实现中创建方法?看起来有点奇怪,但必须有一些好处。
答案 0 :(得分:0)
我已经看到它在C中完成了很多,它只是使代码内联而不是单独的函数
当函数只是一行时,它消除了调用函数的开销。它强制它是内联的
几乎所有的编译器都会使这个小函数无论如何都能成为一个函数,所以这并不是一个很好的理由。更多的风格选择。它也非常容易出错
答案 1 :(得分:0)
根据High Order Blog: -
在某些情况下,宏提供了通过其他方式无法获得的必要功能。一个例子是当代码执行时你需要实际拥有当前代码位置的上下文。
例如,我有一个简单的宏,我有时会调用Objective-C来记录调用某些方法时。这可以这样做:
NSLog(@"%@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
这不能移动到Objective-C方法,因为它总是会记录该方法的名称。 (显然它不能被移动到C方法中,因为没有self和没有_cmd变量可用。)为此创建一个宏很简单,但是:
#define LOG_SELECTOR() NSLog(@"%@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd));