xcode

Pinceladas de Objective-C para Rubyistas

 RubyMotion nos permite desarrollar aplicaciones para iOS sin necesidad de escribir código Objective-C. Sin embargo, es muy importante aprender a leerlo, ya que nos facilitará el aprendizaje del SDK de Apple.

A primera vista, Objective-C y Ruby no podrían ser más diferentes el uno del otro. Mientras que Ruby es hermoso y elegante, Objective-C parece un entresijo de corchetes. Sin embargo, si miramos más allá de las diferencias sintácticas, podemos observar que en realidad no difieren mucho uno del otro, ya que ambos lenguajes heredan características de Smalltalk

Mensajes

Al igual que con todos los lenguajes basados ​​en Smalltalk, el modelo de POO de Objective-C se basa en enviar mensajes a instancias de objetos. Veamos la sintaxis:

Equivalente en Ruby:

Ej. Instancia de un NSMutableArray de Cocoa.
En Objective-C

En Ruby:

Clases y objetos

Diseño
El diseño de clases en Objective-C es similar al de C++, ya que ambos requieren que la interfaz e implementación de una clase estén en bloques de códigos separados. Por convención, la interfaz se sitúa en un archivo de cabecera (.h) y la implementación en un archivo de código (.m).
Interface implementation
Veamos la sintaxis:

Equivalente en Ruby:

Instancia
La instanciación de clases en Objective-C es un proceso que consta de dos pasos: primero se  debe asignar una cierta memoria para el objeto llamando al método alloc, y luego lo inicializamos con el método init.
En Objective-C

En Ruby:

Propiedades

Las propiedades de un objeto permiten a otros objetos acceder o cambiar su estado. Como sabemos, en un programa bien diseñado, no es posible acceder directamente al estado interno de un objeto, para ello usamos los métodos de acceso ( getters y setters ).

Properties

Declaración
En Objective-C

En Ruby:

Acceso
En compilador de Objective-C genera un getter y setter para la propiedad. Una vez declara la propiedad, puede llamar a estos métodos como si estuvieran incluidos en la interfaz de la clase y en el fichero de implementación:

Equivalente en Ruby:

Atributos más importantes de las propiedades

getter=Permite usar un nombre personalizado para el método getter.
setter=Permite usar un nombre personalizado para el método setter.
readonlyPropiedad de solo lectura
nonatomicNo garantiza la integridad de los accesores en un entorno multihilo, pero es más eficiente que atomic
strongCrea una relación fuerte entre la propiedad y el valor asignado. Es el valor por defecto.
weakCrea una relación débil entre la propiedad y su valor.
copyCrea una copia del valor asignado en lugar de hacer referencia a la instancia actual

Métodos

En la declaración de métodos se deben especificar varias cosas: el tipo de método (de clase o de instancia) el tipo del valor de retorno, su nombre y sus parámetros (con sus tipos incluidos).
A diferencia de otros lenguajes, el nombre de los métodos en Objective-C es una combinación de su nombre y sus parámetros.
Veamos un ejemplo del SDK de Apple:

  • El guión “-” nos indica que se trata de un método de instancia.
  • El tipo devuelto es un NSInteger.
  • Los parámetros son tableView, y numberOfRowsInSection:section

Equivalente en ruby:

 

Resumen

En este post hemos visto pequeñas pinceladas del runtime de Objective-C, algunas peculiaridades de su sintaxis, y lo excesivamente “verbose” que es en comparación con Ruby.
Hasta la próxima entrada!