2012-05-13 9 views
9

Estoy trabajando con una pequeña startup con el objetivo de crear una aplicación para iPhone. Los programadores de nuestro equipo conocen C y Java, pero no tenemos experiencia en ObjC/C#/iPhone, aprenderemos algo sin importar qué. Todas las preguntas que he visto sobre este tema han sido desde la perspectiva de un programador de C# entrar en iOS, así que no tengo ninguna información sobre los méritos relativos de aprender una u otra.MonoTouch v. Objective-C para los nuevos desarrolladores de iPhone

Por lo tanto, lo que yo quiero saber es los méritos relativos de C# y Objective-C para los nuevos programadores, con respecto a estas cosas:

  • Rendimiento
  • Facilidad de uso
  • facilidad de aprendizaje
  • Fiabilidad (es decir, tendrá una nueva versión de iOS romper una aplicación MonoTouch?)

Además, se han escrito en MonoTouch cualquier beneficio para el desarrollo multiplataforma con Android?

+2

[El desbordamiento de la pila no es un motor de recomendación.] (Http://meta.stackexchange.com/a/128562/133242) –

+3

Está pidiendo comparaciones (rendimiento, facilidad de uso, etc.) y no pide recomendaciones. ... –

+4

Para entender los documentos de lenguaje y marcos y la mayoría del código de ejemplo, deberá aprender Objective-C de todos modos. –

Respuesta

13

Si el objetivo de su inicio es crear una aplicación de iPhone, entonces obviamente debe aprender el idioma con el que se crean las aplicaciones de iOS, Objective-C. Su equipo ya tiene experiencia con C, por lo que debería ser muy fácil comenzar. The Big Nerd Ranch books te pondrá en funcionamiento en una semana o dos (no estoy asociado con Big Nerd Ranch, creo que son increíbles).

No entiendo por qué mencionas MonoTouch, teniendo en cuenta que tu equipo no tiene la experiencia C#/.NET. Hay montones de otros frameworks como MonoTouch, incluyendo Titanium SDK (JavaScript), RubyMotion (Ruby), y así sucesivamente. Todos estos son geniales, pero como veo, son principalmente para aquellos con experiencia en sus respectivos idiomas. Se permitirá escribir aplicaciones de iOS usando un lenguaje que esté más familiarizado con, pero tienen los siguientes inconvenientes:

  1. rendimiento puede ser tan bueno, pero por lo general un poco (a veces mucho) peor que una aplicación escrita en Objective-C.
  2. Los recursos para aprender no son tan abundantes como los del iOS SDK/Objective-C. Hay muchas personas que quieren hacer aplicaciones para iOS, y esas personas usan estos marcos, y se diluyen entre ellos. Solo una pequeña fracción de los recursos disponibles para el desarrollo de iOS se dedicará a cualquier marco.
  3. Estos marcos están basados ​​en el SDK/Objective-C de iOS, por lo que naturalmente el desarrollo está siempre un paso atrás. Si Apple implementa API radicalmente nuevas en la próxima versión del SDK de iOS, tendrá que esperar a que estos marcos se adapten (las aplicaciones escritas en Objective-C también podrían romperse, pero será más fácil tratarlas basándose en punto n. ° 2).
  4. La mayoría de estos marcos requieren familiarizarse con el SDK de iOS. Todavía necesitará saber que una aplicación llama al método - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions en el momento del lanzamiento, pero además tendrá que recordar cómo traducir eso en el método apropiado para MonoTouch: public override bool FinishedLaunching (UIApplication app, NSDictionary options).El iOS SDK es enorme, y la mayoría de los desarrolladores de iOS confían en la documentación de Apple para obtener información. Por lo tanto, mirará los documentos API escritos para Objective-C y traducirá los métodos al marco de su elección.
  5. El ecosistema de Objective-C está en constante evolución, con nuevos y geniales proyectos como CocoaPods, bwoken, etc. Estos se desarrollan principalmente con Objective-C y Xcode en mente. Configurarlos para que funcionen con su marco de trabajo casi siempre le ocasionará tiempo y trabajo extra.

Los puntos anteriores generalmente me han impedido profundizar demasiado en cualquiera de estos otros marcos. Todos son geniales, pero su principal mérito en la adopción parece ser facilitar el desarrollo para personas con habilidades profundas fuera de Objective-C, o permitir el desarrollo multiplataforma para equipos pequeños que carecen de los recursos para invertir en Android y iOS (y Windows Phone) programadores. Es de esperar que los beneficios superen los costos anteriores para los adoptantes.

Además, ¿escribir en MonoTouch tendría algún beneficio para el desarrollo multiplataforma con Android?

Supongo que sería. De hecho, el MonoTouch homepage promociona eso como una ventaja principal de usar el marco. No estoy tan seguro de las clases de vista/controlador, ya que parece que estarían vinculadas con UIKit, pero la lógica encapsulada en los modelos debería ser bastante fácil de transportar.

En resumen, creo que usted y su equipo deberían seguir con Objective-C para el desarrollo de iOS.

+1

De acuerdo en que generalmente la mejor apuesta es ObjC (y sus razones son excelentes). Tengo algunas esperanzas reales para RubyMotion dadas mis investigaciones con MacRuby (que en realidad es bastante buena OMI). Aún no he visto experiencias realmente buenas con las respuestas de JavaScript, especialmente Titanium. Usar JavaScript significa que estás sujeto a todos los dolores de cabeza de UIWebView, y hay muchos. Y Titanium personalmente he encontrado que es un dolor de cabeza real. Siempre recomendaría ObjC sobre JavaScript para iOS; es más rápido desarrollarse en ObjC por lejos. Pero estoy reteniendo el juicio sobre RubyMotion; podría ser bastante bueno. –

+0

MacRuby es genial (mientras tanto lamento el triste estado de PyObjC), y RubyMotion parece muy prometedor.Aparentemente tiene soporte para ctags, lo que debería ayudar con el autocompletado de métodos API, y la posibilidad de ver actualizaciones de UI en tiempo real podría hacer que el desarrollo de los componentes de la IU sea más rápido que ObjC en algunos casos. Estoy planeando darle un giro pronto. Titanium ciertamente pierde en el ámbito del rendimiento (aunque a veces esto puede estar mediado por consejos/trucos específicos), pero JS-to-iOS y JS-to-Android es muy, muy atractivo. – modocache

+0

¿Por qué no enumerar algunos inconvenientes bien conocidos también? 1) tiene que administrar la memoria por su cuenta (MonoTouch tiene GC); 2) un nuevo lanzamiento de iOS también rompe aplicaciones basadas en Objective C (muchas aplicaciones se bloquearon después de actualizar mi iPad a iOS 4 y 5); 3) El objetivo C sigue siendo un dialecto extraño de la familia C/C++ (no importa cuántos recursos haya, aún debes luchar para aprenderlo); 4) si necesita comunicarse con servicios web externos (excepto iCloud), es posible que deba confiar en una biblioteca que no es de Apple (MonoTouch se encarga de eso y de muchos otros, ya que es una ventaja de .NET/Mono) . –

1

El objetivo C es un superconjunto estricto de C, por lo que si comprende las características de rendimiento del código C compilado en ARM, puede usar ese subconjunto C que conoce, excepto la IU de iOS.

Parece haber informes de que los programadores experimentados de C comienzan a ponerse al día escribiendo aplicaciones de iOS en el Objetivo C del orden de 2 semanas. Pero, por supuesto, aprender marcos extensos y API en un proceso de aprendizaje continuo, sea cual sea el idioma.

7

Si acaba de construir una aplicacióniPhone, entonces por supuesto elegir Objetivo C. Pero si quieres un móvil aplicación — que puede incluir Android, Windows Phone, Windows RT, mora, webos, o otras opciones — es posible que desee examinar de cerca algunas de las plataformas alternativas, de las cuales MonoTouch es una opción destacada.

0

Para el rendimiento, la respuesta es Objective-C, todo el camino.

Dicho esto, eche un vistazo a hacer esto con HTML5. Si se adhiere a las transformaciones aceleradas, el rendimiento de HTML5 para una interfaz de aplicación es sorprendentemente bueno. También es bastante fácil mover su aplicación HTML5 a Android.

La respuesta simple es Objective-C. No es muy difícil de aprender. Si eres sólido en C y sólido en OOP, estarás bien.

+1

No soy partidario de declaraciones absolutas sin referencias. Usted dice que "para el rendimiento, objetivo-C todo el camino". Quién sabe, puede estar en lo cierto, pero si apunta a un recurso de medidas reales, sacaría su declaración del área de opinión arbitraria que me gusta menospreciar. – ctacke

+0

@ctacke Está basado en 1) experiencia y 2) la comprensión intuitiva de que el camino más delgado es generalmente el más rápido. Hay algunos trucos para que las cosas se mantengan rápidas (por ejemplo, usar vistas con traducción y transparencia), pero Apple ha optimizado en gran medida lo que ven como la ruta de destino. Muestra. Es posible que desee rechazar (y sentirse libre), pero no voy a proporcionar citas para una respuesta claramente obvia (repetida por otros). Lo más importante de mi respuesta aquí es que HTML5 debe estar en su lista, pero entre Mono Touch y Objective-C, no veo mucho motivo para desviarme fuera del jardín. – chaboud

+2

@chaboud - ese monotouch debe estar detrás de Html5 en términos de rendimiento es ridículo. Debe proporcionar citas si desea hacer declaraciones como esa. Safari Js es mucho más lento, especialmente para la animación con JQuery. Quizás CSS3 es mucho mejor, pero no suena como una gran solución. –

Cuestiones relacionadas