向Objective-C方法和属性添加元数据

时间:2012-06-14 15:22:56

标签: objective-c reflection

如何向Objective-c方法和属性添加其他自定义信息?我想稍后在运行时检索此元数据。

我知道objective-c不直接支持方法属性,比如在C#中,但这正是我要找的:

[MyCustomAttribute(true)]
public void MyAwesomeMethod(int arg) {
     // ...
}

我最近发现的最接近的事件是名为#define的UIKit头文件中的UI_APPEARANCE_SELECTOR。显然Apple会标记某些方法,以便稍后阅读。

然后按如下方式定义方法和属性:

@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;

- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics UI_APPEARANCE_SELECTOR; 

有人可以解释这是如何运作的吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

没有对标记元数据(.NET中的属性,Java中的注释等)的内置支持。这里的Apple宏仅仅是为了他们的开发人员工具的好处,你不能创建自己的有任何意义的自己的预处理器。

GCC / LLVM定义了一些可以附加到各种符号的属性。例如,您可以通过使用__attribute__((__deprecated__))标记方法将其标记为已弃用,但仍然无法创建有意义的自定义属性。

如果你告诉我们你想要完成什么,也许我们可以提出另一种方法来解决这个问题。