如何在运行时访问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:
阅读下面我自己的答案。
设置Deployment Target
到iOS 8和iOS 9+时发现绝对不同的行为。当Deployment Target
设置为iOS 8时,Objective-C运行时没有关于类属性的信息,并且在Deployment Target
设置为iOS 9+时具有所有必需的信息。所以我正在开发的框架将成为iOS 9+。
我不认为你实际上可以做到这一点。类属性不能合成,也不能自动合成。您有责任实施getter/setter或使用@dynamic。这似乎是类级别getter/setter方法的语法糖,因此没有显示出来。
我不知道这是暂时的吗?
你特别想做什么?
我正在开发DI框架,并希望实现动态属性注入 – k06a
你为什么要这样? – PnotNP
@NulledPointer我正在开发DI框架 – k06a