Si eres realmente bueno en Java, deberías entender el objetivo C fácilmente.
Solo necesitará acostumbrarse a la sintaxis de corchetes que pasan mensajes y dividir sus clases en dos archivos.
Todas las demás nociones son más o menos iguales.
- ¿Cuál es la mejor estrategia de crecimiento para una aplicación de red social?
- ¿Las tiendas de Apple tienen la capacidad de actualizar el software de los modelos de pantalla de una vez?
- ¿Por qué algunas aplicaciones en el formulario APK no se encuentran en Play Store / App Store?
- ¿La categoría que elige para su aplicación tiene un impacto en la visibilidad de la tienda de aplicaciones?
- ¿Hay alguna aplicación en App Store que pueda notificarme si alguien se masturba en mi Instagram?
Conceptos similares en Java y Objetivo C
- Ambos lenguajes comparten mucha sintaxis tipo C.
- En Java tiene interfaces, aquí tiene protocolos que también le permiten mantener ciertos métodos opcionales, y tiene muy buenas API de tiempo de ejecución para verificar si un objeto admite un método o un protocolo que es mucho más conveniente que la API Reflection de Java.
- Aquí también se aplicarán muchos patrones de diseño.
- Tiene colecciones similares: de hecho, en el Objetivo C, tiene una sintaxis literal para jugar con ellas que no sean los métodos normales. Tiene NSDictionaries para mapas, NSArrays para listas y NSSets, lo mismo que conjuntos.
- Tienes tipos de datos primitivos, como los que tienes en Java. todo igual excepto que SÍ es verdadero y NO es falso.
- Las primitivas deben envolverse en clases de envoltura para usarse con las colecciones. El objetivo C no tiene auto-boxing y unboxing pero tiene una buena sintaxis literal para convertir primitivas a sus contenedores de objetos.
p.ej. ‘@YES’ ‘@NO’ ‘@ 5’ ‘@ 5.5’ ‘@ (variable)’
Agregar el prefijo ‘@’ convierte un primitivo en un Objeto. - Puede heredar de una sola clase principal e implementar múltiples protocolos / interfaces.
- Tiene una clase principal NSObject para todas las clases (hay algunas excepciones) como si tuviera Object en Java.
- Tienes yo en lugar de esto.
- Tienes super para acceder a las implementaciones de métodos de la clase padre en los reemplazados.
- También tiene que intentar atrapar bloques aquí, pero no se recomiendan métodos que puedan tener un error, espere un objeto de error que modifiquen cuyo valor debemos verificar para determinar si hay algún problema de tiempo de ejecución o no.
- Los conceptos de bloqueos, bloques de código sincronizado son similares cuando se trata de subprocesos múltiples.
Lo que extrañarás
- Paquetes / espacios de nombres. Objective-C cree en tener prefijos en los nombres de las clases para evitar conflictos de nombres. Desearía que pudieran agregar espacios de nombres en el Objetivo C.
- Genéricos Una gran característica que falta.
- Los bloques Try-Catch como mencioné no son geniales.
Cosas nuevas que te encantarán usar
- Bloques !!!!! Estas son funciones anónimas que se pueden pasar a los métodos y retienen las variables de estado utilizadas dentro de ellos.
Estos son muy convenientes para los cuales las API de Java, como los oyentes, usan interfaces funcionales, es decir, interfaces con métodos únicos y luego usan una sintaxis de clase anónima para simplemente implementar ese método. ¡Project Lambda y Java 8 aún no han despegado! - GCD / Concurrencia: Una forma muy agradable cuando se combina con bloques para ejecutar código simultáneamente en colas separadas con subprocesos administrados por el sistema.
- ARC: el conteo automático de referencias le brinda la conveniencia de recolectar basura durante el desarrollo, no necesita administrar la memoria manualmente. Pero en lugar de un GC que ocupa la CPU para recolectar bloques de memoria no utilizados, la administración de la memoria es manual, excepto que el compilador hace todo eso por tú. Aún necesita comprender la administración de la memoria para comprender cómo funciona ARC.
- Datos básicos: aunque no es una característica del lenguaje, hace que la persistencia parezca parte del lenguaje.
- Predicados y clasificación de listas / NSArrays es impresionante.
- Una gran cantidad de métodos de utilidad en las clases de cadenas.
- Categorías: en cualquier momento sientes que Apple perdió un método en cualquiera de sus clases o algún marco que está utilizando pierde el método de conveniencia que desea.
No es necesario subclasificar, ¡solo cree una Categoría para esa Clase y todos los objetos de esa Clase y sus Subclases tendrán el método! - propiedades: aunque no me gusta usar setters y getters innecesariamente, pero si es necesario, tienes un buen one-liner que lo hará todo por ti.
Puntos a tener en cuenta: cuando dices “No quiero aprender un nuevo lenguaje (Objetivo C) desde cero”
- ¡No tendrás que aprender todo desde cero!
- Solo tiene que saber qué hay de nuevo en el Objetivo C.
- ¡No hay una buena manera de hacer aplicaciones iOS con Java y, lo que es más importante, cuando dices Java, el poder reside en las vastas bibliotecas de conjuntos y JVM! No podrás usar ninguna de ellas en iOS a menos que alguien construya algo como lo que Xamarin hace por .net en iOS donde transfiere el tiempo de ejecución .net junto con la compilación.
- ¡Java es un lenguaje débil! carece de muchas características buenas presentes en los idiomas modernos necesarios para el desarrollo rápido de aplicaciones.
Si quisiera saber cómo usar Ruby, JavaScript o C # para el desarrollo de iOS, ¡le habría indicado proyectos como RubyMotion, Appcelerator Titanium o Xamarin.iOS!
¡O si quisiera aprovechar sus habilidades de desarrollo web, entonces Apache Cordova o PhoneGap podrían haber sido pocas opciones!
Pero Java, hasta donde yo sé y puedo Google, ¡no hay mucho!
¡Aquí hay un conversor de código Java a Objective C!
j2objc: una herramienta de traducción y tiempo de ejecución de Java a iOS Objective-C. – Alojamiento de proyectos de Google
¡y Google ha creado una biblioteca multiplataforma llamada playN que se ejecuta sobre GWT y convierte la base de código Java a iOS, Android, Java nativo, HTML5 y Flash!
para juegos puedes echarle un vistazo.
playn – Biblioteca de juegos multiplataforma para plataformas N≥5 – Google Project Hosting
¡Gracias!