jueves, 26 de enero de 2012

Objective-C

Primero que nada, este blog estará dedicado a tutoriales y demás cosas que se me ocurran que se puedan enseñar acerca de este lenguaje (Objective-C). Empezaré con una breve introducción del lenguaje y algunas características del mismo (espero la lectura sea de su agrado).

"The Objective-C language is a simple computer language designed to enable sophisticated object-oriented programming. Objective-C is defined as a small but powerful set of extensions to the standard ANSI C language. Its additions to C are mostly based on Smalltalk, one of the first object-oriented programming languages. Objective-C is designed to give C full object-oriented programming capabilities, and to do so in a simple and straightforward way." [1]

Como podemos leer, Objective-C es un lenguaje simple y sofisticado orientado a objetos. Define un conjunto de pequeñas pero poderosas extensiones de ANSI C, pero además de esto, se basa también en Smalltalk, el cuál fue uno de los primeros lenguajes de programación orientados a objetos. Simplemente, Objective-C está diseñado para dar todas las ventajas de C, orientado a objetos de forma simple y directa.
A pesar de que no se tocará el tema de como funciona el compilador de Objective-C "a bajo nivel", referencio un artículo de Apple por si consideras importante leer a cerca de esto [2].

Bases ...

Primeramente, una breve explicación de los frameworks más usados en Objective-C ya que son sobre los cuales son construídas casi cualquier aplicación:
  • UIKit (User Interface Kit): Como su nombre puede describirlo, es el (kit) encargado de proveer al usuario con componentes gráficos para el desarrollo de una aplicación (labels, tablas, botones, etc) [3].
  • Foundation: Contiene la capa de clases de Objective-C. Estas comienzan con el prefijo NS (de NeXTSTEP, sistema operativo orientado a objetos creado por Next Computer, empresa fundada por Steve Jobs después de ser despedido de Apple en 1985) y son las que manejan datos, por ejemplo NSString para control de cadenas, NSInteger para enteros con signo y así sucesivamente muchas otras clases [4].
Estos dos frameworks son los más básicos e importantes y los que siempre serán añadidos a cualquier tipo de proyecto que crees desde Xcode.

Memoria

Uno de los aspectos MÁS importantes de Objective-C es el manejo manual de la memoria. "¿Qué es esto?" podrías preguntarte … Si vienes de lenguajes como C o C++ puedes estar familiarizado con este conceptos; pero si vienes de Java, C# u otros lenguajes, esto será un nuevo paso para ti. Primero debemos definir los tres tipos de manejo de memoria que "conocemos" en Objective-C:
  • ARC (Automatic Reference Counting): Característica nueva en Objective-C a partir de LLVM 3.0 y iOS 4+ (en realidad fue liberada con iOS 5 pero puedes dar soporte a tus Apps de iOS 4+) la cuál consiste en que el compilador se encarga del ciclo de vida de los objetos según su propio "razonamiento" (esto obvio también dependiendo de cómo el programador maneje el ciclo de vida del objeto a conveniencia) [5].
  • MRC o MMR (Manual Reference Counting o Manual Retain/Release): Tú y SÓLO tú eres el responsable del ciclo de vida de los objetos mediante llamadas "retain" (retener) y "release" (soltar) mediante un mecanismo llamado retain count el cual determina el "tiempo" de vida de un objeto (será explicado más a fondo).
  • Garbage Collection: Tú no tienes ninguna responsabilidad sobre el ciclo de vida de los objetos sino un "collector" (no disponible en iOS, sólo OS X).

Nosotros en lo personal creemos que usar MRC es la forma efectiva ya que el programador debe ser el responsable de la memoria que crea y debe liberar en sus aplicaciones para que estas funcionen de forma óptima. Debido a que este pequeño tutorial es algo demasiado introductivo a Objective-C, dejaremos el manejo de memoria para otro momento ya que se merece su propia página para explicar a fondo muchos conceptos importantes del tema.

Más cosas básicas pero importantes

En Objective-C la forma de crear clases es similar a C++, esto es, tenemos un archivo de interface (.h) y un archivo de implementación (.m) los cuales son definidos de la siguiente manera:

@interface MiClase : NSObject {
NSString *unaCadena;
}
- (NSInteger)suma1:(NSInteger)num1 suma2:(NSInteger)num2;
+ (NSString *)cadenaFija;

@end

@implementation MiClase

- (NSInteger)suma1:(NSInteger)num1 suma2:(NSInteger)num2 {
return num1+num2;
}
+ (NSString *)cadenaFija {
return @"Mi Clase";
}
@end

Los componentes que podemos resaltar del código anterior son "@interface MiClase : NSObject" donde @interface es la directiva para declarar nuestra interfaz de clase, "MiClase" es el nombre de nuestra clase y " : NSObject" la cual nos indica que "MiClase" hereda de NSObject (toda clase debe heredar de otra, NSObject es la clase padre de todas en Foundation framework). Entre llaves ( { } ) encontramos las propiedades de la clase que son accesibles mediante instancias de esta clase. El método "suma1:suma2:" es un método de clase (delimitado por el signo "-", lo que significa que debemos crear una instancia de la clase MiClase para acceder a el) el cuál recibe dos parámetros y regresa un NSInteger (entero con signo), y el método "cadenaFija" que es un método de instancia (delimitado por el signo "+", lo que significa que no debemos crear una instancia de la clase MiClase para acceder a el, sino simplemente llamar el método desde la clase de la forma [MiClase cadenaFija]) y regresa un NSString con el valor de @"Mi Clase". Y en el archivo de implementación encontramos "@implementation MiClase" donde definiremos las funcionalidades de los métodos definidos en el .h como se muestra arriba.

Obviamente hay muchas más cosas importantes de Objective-C como delegados, protocolos, properties, categorías, subclases, y demás, pero todo esto debe ser cubierto en temas aparte para su mejor comprensión. Esta pequeña introducción ha sido a manera de sólo cubrir conceptos básicos del lenguaje para gente interesada en el desarrollo de apps para iPhone/iPad. Los tutoriales posteriores pretenden enfocarse en los temas ya mencionados para dar un preámbulo más extenso acerca de Objective-C y sus grandes características.

Fuentes Citadas:

No hay comentarios:

Publicar un comentario