这段代码用什么剂量来获取对象属性的名称?

时间:2015-06-30 01:23:12

标签: ios objective-c properties

#define propertyKeyPath(property)(@""#property)

如果我像这样使用这个宏:

NSLog(@"%@",propertyKeyPath(self.someProperty)); 

我会得到self.someProperty

我想知道它是如何工作的,谢谢。

这是我看到这种用途的网站:“http://www.g8production.com/post/78429904103/get-property-name-as-string-without-using-the

1 个答案:

答案 0 :(得分:2)

纠正后:

#define propertyKeyPath(property)(@""#property)

这个宏正在做的是将其参数转换为字符串。

宏通过文本扩展工作 - 它们的扩展插入到编译器看到的文本中,编译器然后分析结果。在带有#的参数之前的宏中,将参数作为C字符串插入到宏的扩展中。所以你的宏调用:

propertyKeyPath(self.someProperty)

扩展为:

(@"""self.someProperty")

现在源中的两个相邻C字符串由编译器连接(这通常用作分解大字符串以便于键入和读取的方法)。扩展有两个相邻的字符串:"""self.someProperty"所以这些字符串连接起来只生成"self.someProperty",您的文字现在看起来像:

(@"self.someProperty")

编译为Objective-C字符串文字。

这就是它所做的,至于为什么使用宏而不是直接写字符串文字我不能说。

HTH