通常使用宏来创建方法名称是否有效?我的意思是......实际上它只是在编译器实际运行之前进行简单的文本替换,对吧?
答案 0 :(得分:1)
没有什么可以阻止这一点。它甚至常用(虽然我不知道对于iPhone),例如,在设备驱动程序实现中。在这种情况下,宏用于生成样板代码,并且要使此样板与代码通信,您必须猜测正确的函数名称(不建议),或者使用生成宏,例如USB_ATTACH(uthum)
来生成uthum
驱动程序的attach方法的签名。
答案 1 :(得分:1)
是的,它是有效的;宏扩展发生在编译器甚至读取代码之前。主要限制是无法在预处理程序指令中嵌入预处理程序指令。所以,例如:
// This is ok:
#define PREFIX(X) this_name_is_prefixed_ ## X
// ...
- (void) PREFIX(doSomething):id;
// ...
// But this isn't:
#define IMPORT(X) #import X
IMPORT(<Foundation/Foundation.h>) // <= Don't expect this to work
除了“#import”指令外,Objective-C的预处理器基本上与C preprocessor相同。 (“#import”类似于“#include”,除了#import意味着只包含一次,因此只有#import包含的头文件不需要预处理器保护。