【问题标题】:Is it possible to convert NSString to plain Objective C code是否可以将 NSString 转换为纯 Objective C 代码
【发布时间】:2013-02-16 12:38:01
【问题描述】:

例如我有

NSString *string = @"return sharedInstance;";

我有一个类方法

+ (id)sharedInstance;

我可以将该字符串转换为纯代码并在我的方法中使用它吗?这对于调试非常有用。假设我有一个方法,我想测试一些代码(让它成为简单的返回值,这可能吗?)我可以为该方法编写代码并在运行时测试新代码。

【问题讨论】:

  • 您想在运行时编译 objc 代码并执行它们吗?最好使用脚本语言查看选项。这就是我使用的:github.com/xlc/CocoJS
  • 你在这里说的是什么脚本语言?例子?
  • 太棒了!那么我可以在运行时编辑 .js 文件吗?
  • 顺便说一句,我使用的是越狱设备,所以我不在乎它需要什么权限,它使用什么私有方法等。@xlc0212
  • 一个很酷的技巧是将编译器嵌入到您的可执行文件中。这是可行的,但你最好尝试一下python或其他一些脚本语言。

标签: iphone ios objective-c xcode nsstring


【解决方案1】:

iOS 上的 Objective C 是一种编译语言;代码在您运行应用程序之前很久就被解释并翻译成机器代码。像这样以动态方式运行目标 C 是不可能的。为此,您将需要一种动态语言。

【讨论】:

    【解决方案2】:

    你所描述的并不完全可能。但是支持某些东西,例如,实例化类和使用字符串调用方法(理论上)的能力:

    NSClassFromString 允许您根据传递的字符串实例化类。

    NSSelectorFromString 允许您根据传递的字符串调用或“调用”方法。

    字符串可以在运行时动态确定。

    根据您的 cmets,这显然不是您感兴趣的(尽管我认为它确实解决了您的问题)。您可以做的一件事(它不是原生的 Obj-C,但我认为考虑到某些 cmets 是相关的)是将 JavaScript 注入到 UIWebView 中。

    【讨论】:

    • 这不是我想要的,我知道这个
    • 你想要的都是不可能的。
    • 这是 Objective-C 中最接近的事情。
    • 您可以将 JavaScript 注入 UIWebView。这可能适合也可能不适合您的需求。
    • 感谢您的帮助,如果可以在运行时更改 NSSelectorFromString 将有很大帮助
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2011-12-04
    • 2011-01-24
    • 2018-03-31
    相关资源
    最近更新 更多