2016-09-23 56 views
1

那是什麼,我有:如何在運行時訪問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

回答

1

設置Deployment Target到iOS 8和iOS 9+時發現絕對不同的行爲。當Deployment Target設置爲iOS 8時,Objective-C運行時沒有關於類屬性的信息,並且在Deployment Target設置爲iOS 9+時具有所有必需的信息。所以我正在開發的框架將成爲iOS 9+。

0

我不認爲你實際上可以做到這一點。類屬性不能合成,也不能自動合成。您有責任實施getter/setter或使用@dynamic。這似乎是類級別getter/setter方法的語法糖,因此沒有顯示出來。

我不知道這是暫時的嗎?

你特別想做什麼?

+0

我正在開發DI框架,並希望實現動態屬性注入 – k06a