我想标记一个属性,因为它注入了如下的值......
@property (nonatomic, strong) id<MyDownloadingManagerDelegate> \
injectedDownloadManager __attribute__((annotate("DependenceInjection:inject")));
有没有办法在运行时读取这个注释?
我尝试了以下但没有成功。
objc_property_t* properties = class_copyPropertyList([instance class], &count);
for (int i = 0; i < count ; i++)
{
objc_property_t property = properties[i];
const char* propertyAttrs = property_getAttributes(property);
答案 0 :(得分:2)
__attribute__
是编译器注释;除了少数例外(constructor
/ destructor
之外,它们对运行时行为没有影响。它们肯定与ObjC运行时的编码或其他内部簿记无关。
我建议您使用类方法创建一个协议,每个符合类的实现都返回一个可注入属性的列表。此想法的先例由+keyPathsForValuesAffectingValueForKey:
设定。