【问题标题】:Can I do NSVariableFromString like NSClassFromString and NSSelectorFromString?我可以像 NSClassFromString 和 NSSelectorFromString 那样做 NSVariableFromString 吗?
【发布时间】:2012-08-01 09:39:00
【问题描述】:

是的,所以我注意到您可以执行 NSClassFromString 和 NSSelectorFromString。

是否可以做类似 NSVariableFromString 的事情?

【问题讨论】:

  • 我实际上并没有尝试做任何我只是想知道的事情。这真的可以使用 NSSelectorFromString 完成吗?当你得到一个变量时,你实际上是在为它调用 getter。
  • 并非所有变量都有选择器,只有属性。
  • 投票的不是我——但很难想到任何现实世界、有用的理由去做你所要求的事情,而且你也没有提供用例......
  • @Paul.s 好的。我很感激你的回应。 +1。我想知道的原因是因为我只需要使用 NSSelectorFromString 来根据某些设置动态更改它需要调用的方法。我目前不需要它,但我可以看到自己在不久的将来需要类似的东西,我想我现在会被问到这个问题。
  • @JoshCaswell 我不同意这两个问题不一样。

标签: objective-c ios cocoa-touch nsstring


【解决方案1】:

Objective C 运行时有很多好东西供您使用。

如果你想要一个 iVar,你可以用字符串名称调用 object_getInstanceVariable。

如果您需要变量,则需要做更多的工作,并且它们必须对链接器全局可见。为此,您可以使用 CFBundleGetDataPointerForName。

请务必阅读文档以了解有关运行时信息的限制和特定信息,以及不同平台上的东西的可用性。

【讨论】:

  • object_getInstanceVariable“不可用:在自动引用计数模式下不可用”还有其他选择吗?
  • @alexgray 这似乎是最新的更新。我找不到有关更改的任何文档。但是,您仍然可以使用class_getInstanceVariable 获取IVar 引用。
【解决方案2】:

没有。编译后的应用程序不包含变量名,除非包含调试信息并且通常不用于发布应用程序。

【讨论】:

    【解决方案3】:

    您可以使用NSScanner 从字符串中获取值,但正如JemeryP 所指出的,在运行时变量名称通常已转换为指针和内存地址。

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多