【问题标题】:Reflection in Objective-C (iPhone)Objective-C (iPhone) 中的反射
【发布时间】:2010-10-22 10:32:51
【问题描述】:

我想从 JSON 字符串填充 [MyClass 类]。

我使用 json-framework 来获取 NSDictionary,并且在我的数据对象上实例化和 setValue: forKey:... 非常容易。

但是对于以类作为 MyClass 成员的更复杂的数据对象,

即:

MyOtherClass *classNoTwo

我试过了

Class test = object_getClass(myClass.classNoTwo);
id foo = [[test alloc] init];

但是 foo 是 nil/null。我发现解决它的唯一方法是在 MyClass 的 init 方法中为它分配内存,然后替换它。

我还想知道如何摆脱 myClass.classNoTo 引用,因为我不应该知道我的通用解析器中的所有属性。

请不要只告诉我阅读文档,因为我已经这样做了,但我无法弄清楚。

提前致谢

【问题讨论】:

  • “请不要只是告诉我...”,任何论坛的新访问者都应该比这更谨慎。

标签: iphone objective-c reflection


【解决方案1】:

尝试调用class_getProperty() 访问特定名称的属性,然后调用property_getAttributes() 访问第一个函数返回的属性。这将返回一个对属性的属性进行编码的字符串,包括类型。字符串的格式在文档中的Property Type Strings 中有说明。

最后,当你派生出属性的类型后,使用NSClassFromString()来实例化一个对象。

有关详细信息,另请参阅上述两个函数的文档。

【讨论】:

    【解决方案2】:

    我编写了一个非常简单的依赖注入容器,名为Factory。我没有完全理解你的问题,但我们解决的问题看起来很相似。看看我的资料,它们非常简单,应该可以帮助您入门。您可能对ClassAnalyzer 类特别感兴趣。这只是一个 hack,但你应该能够从那里得到你想要的。

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多