Objective-C通过字符串在运行时动态定义方法

时间:2014-06-03 21:22:23

标签: objective-c metaprogramming metaclass

在阅读了几篇博客文章并通过SO搜索后,我知道如何向类中添加方法,但没有人触及如何从String定义方法体。

这是一个示例博客文章,它接近我想要做的事情:

http://theocacao.com/document.page/327

但是,SayHello方法仍然需要在目标C代码中。理想情况下,我会有类似的东西:

IMP myMethod = class_addMethodFromString(@"method definition goes here...");

我也看了一下:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/c/func/method_setImplementation

1 个答案:

答案 0 :(得分:1)

我不相信这是可能的。目标C需要编译,所以除非你能编译你从该字符串中得到的代码,否则我认为不可能。 setImplementation方法允许您指向现有的已编译代码块。

如果您真的想要,并且如果您运行的代码由您决定,您可以在UIWebView中执行以字符串格式接收的javascript(不必添加到视图中,您只需要一个例子,我相信。)

您还可能故意在代码中导致缓冲区溢出,然后以这种方式执行任意命令,但同样,您将在已编译的环境中运行,并且需要知道您希望的代码的内存地址执行。