2012-10-11 44 views
7

Hola chicos, así que tengo una pregunta extraña. Quiero crear clases de Objective C en tiempo de ejecución desde un archivo. Entonces, por ejemplo, tengo una aplicación objetiva c, quiero apuntarla a un archivo de texto (o un par .h.m, lo que sea que funcione) y luego hacer que la aplicación analice el archivo de texto y cree la clase en tiempo de ejecución (Clase no objeto). Por supuesto, escribiría el analizador y todas esas cosas, solo quiero saber si es posible. He leído estos dos artículos:¿Puedo crear una clase Objective-C en tiempo de ejecución desde un archivo de texto?

http://www.mikeash.com/pyblog/friday-qa-2010-11-6-creating-classes-at-runtime-in-objective-c.html

http://www.mikeash.com/pyblog/friday-qa-2010-11-19-creating-classes-at-runtime-for-fun-and-profit.html

que muestra cómo hacer una clase de objetivo C en tiempo de ejecución, pero su uso se está haciendo funciones de C que se definieron en tiempo de compilación. Si puedo encontrar una manera de hacer lo mismo usando cadenas para definir las funciones que serían perfectas, porque entonces no tengo que definirlas en tiempo de compilación.

+0

Tut. ¿Desea volver a implementar clang y el vinculador? ¿Sabes cuánto trabajo es eso? – trojanfoe

+0

Debería poder invocar clang para compilar su fuente para generar una biblioteca/paquete dinámico que luego podría cargar usando NSBundle – nielsbot

+0

. No tiene mucho sentido hacer esto para los archivos object-c, para eso solo debe usar clang (o la fuente clang) ... Si está interesado en crear un lenguaje personalizado, eso tiene más sentido ... – nielsbot

Respuesta

1

Sure. Totalmente posible

Sugeriría comenzar con Objective-C support in this ya que incluye un analizador Objective-C completo y un generador de códigos.

2

Eso es lo que se llama programación reflectante. Supongo que no hay soporte de evaluación de código para Obj-C, ya que no es un lenguaje de scripting, por lo que el concepto de reflexión para Obj-C es silenciosamente limitado. Además, en el tiempo de ejecución el compilador ya traduce el código en Obj-C clang code y es un trabajo que consume mucho tiempo simplemente traducir de forma inversa el bytecode y volver a compilarlo

Para la reflexión Obj-C puede consultar estas respuestas

1

ver mi proyecto github cocoa-interprreter hace parte de lo que desea.

toma un archivo de texto y lo compila en el tiempo de ejecución ... y luego ejecuta el ejecutable resultante usando NSTask. Sería muy fácil para cambiarlo por lo que el binario se carga en el propio proceso usando NSBundle

https://github.com/Daij-Djan/cocoa-interpreter

Cuestiones relacionadas