2014-06-03 4 views
-1

После прочтения нескольких сообщений в блоге и поиска через SO, я знаю, как добавить метод в класс, но никто не затрагивает, как определить тело метода из строки ,Objective-C динамически определяет метод во время выполнения через строку

Вот блог пример пост, который приближается к тому, что я хочу сделать:

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

+0

Возможно, что-то возможно, но это не совсем понятно. Можете ли вы добавить фрагмент, демонстрирующий, что вы хотите написать в своем коде? –

+0

Да, см. Отредактированный ответ. – maximus

+0

У вас есть строка, содержащая исходный код, вы имеете в виду? –

ответ

1

Я не верю, что это будет возможно. Задача C должна быть скомпилирована, поэтому, если вы не сможете скомпилировать код, который вы получаете из этой строки, я не думаю, что это можно было бы сделать. Метод setImplementation позволяет указать на существующий, скомпилированный фрагмент кода.

Если вы действительно хотели, и если код, который вы используете, зависит от вас, вы можете выполнить javascript, который вы получите в строковом формате в UIWebView (его не нужно добавлять в представление, вы просто нужен экземпляр, я считаю).

Вы также можете преднамеренно вызвать переполнение буфера в своем коде, а затем выполнить произвольные команды таким образом, но опять же, вы будете работать в уже скомпилированной среде и должны знать адреса памяти кода, который вы были надеясь выполнить.

Смежные вопросы