2008-11-06 12 views
10

Me he vuelto muy cómodo en el mundo de los lenguajes de programación sin punteros y recogidos de basura. Ahora tengo que escribir un pequeño componente de Mac. He estado aprendiendo Objective-C, pero a medida que me enfrento a la posibilidad de que los punteros cuelguen y la necesidad de administrar los recuentos de retención, me siento descorazonado.¿Cuáles son las alternativas a la programación de Objective-C para Mac?

Sé que Objective-C ahora tiene recolección de basura, pero esto solo funciona con Leopard. Mi componente también debe funcionar con Tiger.

Necesito acceder a algunas bibliotecas de Cocoa no disponibles para Java, por lo que descarta mi arma habitual de elección.

¿Cuáles son mis alternativas? Especialmente sin punteros explícitos y recolección automática de basura.

+0

Objective-C 2.0 tiene la recolección de basura. –

+0

Dijo que tiene que trabajar con Tiger también. Esto descarta el recolector de basura. – Hejazzman

+0

En realidad, no importa que Obj-C no tenga recolección de basura (siempre). Utiliza un sistema de conteo de referencia con grupos de liberación automática.Marcar correctamente las variables de la clase OBj-C significa que se agregará el código necesario para administrar los conteos de ref. NO es necesario administrar explícitamente el recuento de refs en Objective-C usando AppKit. –

Respuesta

19

¿Qué quiere decir por "componente?" ¿Quiere decir una porción de código o una biblioteca que va a entregar a otras personas para vincularlas a sus aplicaciones? Si es así, no es realista utilizar ninguno de los idiomas puenteados en este momento. Si bien muchos de los puentes son muy buenos, casi siempre tienen complicaciones y problemas que la mayoría de los desarrolladores de aplicaciones no estarán dispuestos a utilizar para usar un solo componente, especialmente si se trata de generar un tiempo de ejecución sustancial.

Los puentes son más valiosos para conectar otras bibliotecas de idiomas en su aplicación Objective C. Si bien puede escribir aplicaciones bastante completas usándolas, hacerlo a menudo requiere una mejor comprensión del Objetivo C que simplemente escribir una aplicación Objective C, ya que necesita comprender y lidiar con el idioma, el modelo de objeto, el subprocesamiento y la impedancia de asignación de memoria. ocurrir.

Esta es la razón por la que muchas personas argumentan que incluso si usted está bastante familiarizado con un lenguaje, tratando de aprender de cacao en ese idioma a través de un puente es generalmente más difícil que el aprendizaje usando Objective C.

último, gran parte del soporte reciente para lenguajes en puente se debió a "BridgeSupport", se agregó una característica en Leopard. Incluso los puentes que preceden a los que han estado migrando, a veces de tal manera que el uso del lenguaje puente en Tiger y Leopard puede tener diferencias sustanciales.Además, actualmente no hay soporte de puente para iPhone, y la mayoría de los lenguajes en puente no funcionarán en él, si eso es un problema.

En definitiva, si está escribiendo una biblioteca que va a estar vinculada a otras aplicaciones, debe ejecutarla en Tiger y Leopard, y debe acceder a las API exclusivas de Cocoa que creo que encontrará utilizando cualquier C no objetivo. solución bastante difícil.

+0

No es lo que quería escuchar, pero a veces es así. Sin embargo, podría mirar a Python y ver qué puedo hacer. –

0

Mire Python y wxPython (las wxWidgets en Python).

Las wxWidgets tienen un patrón de diseño de aplicación App-Doc-View muy elegante que es muy, muy agradable. No se usa lo suficiente, IMO. No he encontrado ningún ejemplo de wxPython de este ejemplo de App-Doc-View, por lo que debe usar los ejemplos C para razonar cómo funcionaría en Python.

Publicaba ejemplos, pero todavía no lo tengo todo funcionando.

+0

No hay nada como poder usar Interface Builder para desarrollar la interfaz de usuario. Tendrás que trabajar mucho más para obtener una IU "Mac-Like" usando cualquier otra API. –

+0

Trabaja más duro - sí. No "montones", pero definitivamente bastante trabajo. –

+0

Me encantaría ver un buen ejemplo de una aplicación wxWidgets en OSX ... Todos parecen basura. – schwa

11

Puede probar PyObjC para escribir aplicaciones Cocoa en python, o MacRuby si está interesado en Ruby.

+0

Pero seguramente querrá utilizar Leo/Xcode 3+ para hacer PyObjC, y me gustaría comprobar que el código que crea funciona antes de Leopard. –

2

RubyCocoa es cada vez más impresionante, y he visto muchas implementaciones exitosas al usarlo. Esto es, por supuesto, si Ruby su taza de té ...

+0

También echa un vistazo a MacRuby. http://macruby.org – mk12

0

.NET a través de Mono mono-project.com

9

No debe sentirse intimidado por el recuento de referencias de retención/liberación de Cocoa. En la práctica, es mucho, mucho más fácil de lo que los fanáticos de GC te harían creer. Los Cocoa memory management rules son completamente simples, solo afectan una pequeña cantidad de tu código, e incluso ese código se puede generar automágicamente.

Aquí está el truco. Encapsula su código MM en métodos de acceso y siempre utilizan accesos. Xcode tiene scripts integrados para generar los accessors apropiados, o si necesita más flexibilidad, hay aplicaciones de terceros como Accessorizer.

Este no es un enfoque intrusivo: solo tiene que preocuparse por conservar un objeto si va a necesitar guardarlo para usarlo más adelante, y si va a hacer eso, necesitará una instancia variable para mantenerlo de todos modos. Y, si está utilizando KVO y enlaces, deberá usar accesos para asegurarse de que se activen las notificaciones de observadores correspondientes. Básicamente, si está utilizando buenas prácticas de OOP y Cocoa, no hay prácticamente ningún pensamiento o esfuerzo adicional relacionado con la administración de la memoria.

La mayoría de las personas que tienen dificultades con la administración de memoria "manual" de Cocoa lo hacen como resultado de un mal uso. El error más común es dispersar el código relevante por todo el lugar. Eso significa que es difícil encontrar una retención remanente, una liberación extra, etc.

1

Siempre puede usar REALbasic (www.realsoftware.com). Realmente fácil y divertido de usar, aunque no gratuito. No puede hacer que dylibs (o dll) lo usen, pero puede usar dylibs y dll en su código. Y también puede usar librerías de cacao

1

No olvide que también puede usar Java, y no me refiero al puente java-cocoa, me refiero a java real.

También hay un paquete de Apple que también le brinda acceso a un par de características de osx.

También para comentar el punto de Shem, si su orientación es osx 10.5 y superior, puede aprovechar la recolección de basura.

1

Si desea sintaxis Lisp continuación, Nu es un ceceo implementado en la parte superior de Objective-C http://www.programming.nu/

+0

Parece que no hay redirección de www, el enlace es http://programming.nu/ – tvon

0

Estoy buscando en Mono también. Objective-C es un poco demasiado extraño para mí en este punto. Demasiados años haciendo C/C++, Java, C#, Perl, etc. Supongo. Todos estos parecen bastante fáciles de flotar en medio. No es así para Objective-C. Amo mi Mac pero temo que tomará demasiado tiempo para dominar el idioma.

1

Además, FreePascal puede generar aplicaciones nativas de carbono (en curso de trabajo para Coccoa)

Cuestiones relacionadas