September 8th, 2008Hello, World!
Como es costumbre iniciar al aprender un nuevo lenguaje de programación, es el hacer un tradicional "Hola Mundo", en este caso será un poco más amplio, por que en esta ocasión solo va a ser necesario hacer unos cuantos clicks y listo, el IDE te lo generará automáticamente, listo para Build & Go.
Iniciaremos por abrir nuestro Xcode, el cual lo primero que nos muestra es una ventana de Bienvenida, pero lo que vamos hacer es iniciar un proyecto nuevo, en modo Consola como lo conocemos, nos dirigimos al menú File->New Project en el listado de la izquierda seleccionamos Command Line Utility y elegimos el template Fuondation Tool and Choose...
Después nos indicará que elijamos la ruta donde se generará el proyecto, puedes tener una carpeta de Ejemplos y dentro de esa carpeta guardar los proyectos, Xcode te generará una carpeta por cada proyecto nuevo. Listo, nos mostrará nuestro navegador de archivos del proyecto, el código fuente en este caso será Hello.m, el mismo nombre con que guarde mi proyecto. Desde este paso podemos dar click en Build & Go, para poder ver la salida que produce, ir a menú Run->Console.
Si quieres más espacio para tratar el código fuente, solo doble Click en Hello.m y lo mostrará en una ventana aparte. Como esto no tendria sentido, y ya habia comentado que Objective-C esta basado en C, por lo tanto podemos incluir código que hayamos hecho en C para probar. Por lo que quedaria así.
-
#import <Foundation/Foundation.h>
-
#import <stdio.h>
-
-
int main (int argc, const char * argv[]) {
-
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
-
-
//Declaramos nuestras variables y punteros
-
int *nums = calloc(10, sizeof(int));
-
int *pnums;
-
int i=0;
-
//Asignamos la direccion inicial de nuestro arreglo a nuesrtro
-
//puntero auxiliar y llenamos el arreglo
-
pnums = nums;
-
for (i=10; i>0; i--) {
-
*nums = i;
-
nums++;
-
}
-
//Asignamos la direccion de auxiliar a nuestro arreglo
-
// e imprimimos sus valores
-
nums = pnums;
-
for (i=0; i<10; i++) {
-
nums++;
-
}
-
-
NSLog(@"Hello, World!");
-
-
[pool drain];
-
return 0;
-
}
De esta forma probamos que hay completa compatibilidad, ya que hicimos uso de apuntadores y los tipos de datos comunes de C (bueno no todos), pero que significan las demás líneas extrañas?
#import <Foundation/Foundation.h>
En primera usamos import, pero al igual podemos usar include, diferencia?, buena pregunta, import se encarga de incluir solamente una vez el archivo si previamente esté no ha sido incluido, include no lo hace, este caso lo podemos ver también en php con include y require_once, Foundation.h incluye la definición de clases base de NextStep.
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Esta instrucción nos crea un objeto para la administración de la memoria usado en Cocoa(otro termino por ver), este objeto nos cachara todas las asignaciones de memoria que se realicen para después limpiarlas cuando no se utilicen.
NSLog(@"Hello, World!");
NSLog es una función diseñada para desplegar mensajes de error, por eso al ejecutar nuestra aplicación muestra datos de fecha, etc. Algo importante los Strings son asignados y manejados por @"Cadena".
[pool drain];
Aquí solo mandamos a llamar el método drain del objeto pool que creamos arriba, para liberar memoria, después mas detalles.


