#define propertyKeyPath(property)(@""#property)
如果我像这样使用这个宏:
NSLog(@"%@",propertyKeyPath(self.someProperty));
我会得到self.someProperty
。
我想知道它是如何工作的,谢谢。
这是我看到这种用途的网站:“http://www.g8production.com/post/78429904103/get-property-name-as-string-without-using-the”
答案 0 :(得分:2)
纠正后:
#define propertyKeyPath(property)(@""#property)
这个宏正在做的是将其参数转换为字符串。
宏通过文本扩展工作 - 它们的扩展插入到编译器看到的文本中,编译器然后分析结果。在带有#
的参数之前的宏中,将参数作为C字符串插入到宏的扩展中。所以你的宏调用:
propertyKeyPath(self.someProperty)
扩展为:
(@"""self.someProperty")
现在源中的两个相邻C字符串由编译器连接(这通常用作分解大字符串以便于键入和读取的方法)。扩展有两个相邻的字符串:""
和"self.someProperty"
所以这些字符串连接起来只生成"self.someProperty"
,您的文字现在看起来像:
(@"self.someProperty")
编译为Objective-C字符串文字。
这就是它所做的,至于为什么使用宏而不是直接写字符串文字我不能说。
HTH