如何在运行时访问Objective-C类属性?

问题描述:

那是什么,我有:如何在运行时访问Objective-C类属性?

@interface Example : NSObject 

@property (class) NSString *classProperty; 

@end 

,并试图访问类属性:

Class meta = objc_getMetaClass(class_getName([Example class])); 
objc_property_t property = class_getProperty(meta, "classProperty"); // == nil 
objc_property_t *properties = class_copyPropertyList(meta, NULL); // == nil 

我使用的Xcode 8和iPhone的7 iOS的10模拟器,只是想访问类的属性与对象 - C运行时功能。

我在这里读了一些幻灯片:https://developer.apple.com/videos/play/wwdc2016/405/ 而读一些信息在这里:http://useyourloaf.com/blog/objective-c-class-properties/

还检查#if __has_feature(objc_class_property),它具有:

UPDATE Macro to detect availability of class properties in Objective-C

奇怪的事情发生了:今天这段代码工作正常。我确信昨天我有一段时间它的工作,但后来它不是。

更新2:

阅读下面我自己的答案。

+0

你为什么要这样? – PnotNP

+0

@NulledPointer我正在开发DI框架 – k06a

设置Deployment Target到iOS 8和iOS 9+时发现绝对不同的行为。当Deployment Target设置为iOS 8时,Objective-C运行时没有关于类属性的信息,并且在Deployment Target设置为iOS 9+时具有所有必需的信息。所以我正在开发的框架将成为iOS 9+。

我不认为你实际上可以做到这一点。类属性不能合成,也不能自动合成。您有责任实施getter/setter或使用@dynamic。这似乎是类级别getter/setter方法的语法糖,因此没有显示出来。

我不知道这是暂时的吗?

你特别想做什么?

+0

我正在开发DI框架,并希望实现动态属性注入 – k06a