#import <Foundation/Foundation.h>
/* Podemos utilizar comentarios
Multilinea como en C */
int main () {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"Hola Mundo\n"); // Comentario en una línea ala C++
[pool drain];
return 0;
}Objective-C, al igual que C++, es un super conjunto de C y por lo tanto, el código que hemos mostrado para la versión C de nuestro Hola Mundo es perfectamente válido. Sin embargo, el lenguaje se popularizó cuando fue elegido como lenguaje de programación para la plataforma NeXT y su sistema operativo NeXTStep. NeXTStep como todo sistema operativo que se precie ofrecía a los programadores una serie de elementos para facilitar la programación de aplicaciones.
Vamos a centrarnos en el uso de Objective-C sobre esta plataforma por dos razones fundamentales. La primera es que de no ser así, las versiones Objective-C y C serían idénticas (a no ser que quisiéramos liarla a propósito). La segunda es que gran parte de NeXTStep todavía existe en los sistemas operativos de la compañía Apple además de existir una versión libre conocida como GNUStep.
Merece la pena echar un ojo a NeXTStep debido a la elegancia (herencia de Smalltalk) tanto en su diseño como en su implementación y es por ello que incluimos esta faceta en este libro.
SABIAS QUE
Todas esas funciones y clases comienzan por NS ya que forman parte del sistema operativo NeXTStep
La primera y última línea del programa hacen uso de la clase
NSAutoreleasePool la cual ofrece un sistema de gestión de
memoria de contaje de referencia. Lo que esto significa, así sin entrar
en detalles, es que cada vez que usamos un objeto un contador interno de
uso se incrementa. De la misma forma, cuando dejamos de usar un objeto,
el contador se decrementa. Sin embargo, el objeto en cuestión solo se
destruirá cuando ese contador llegue a cero. Eso nos permite evitar el
borrar objetos por error que todavía están siendo utilizados en otra
parte de nuestro programa. El mensaje drain al final se
encarga de liberar los objetos en este entorno.
Si bien, en este ejemplo, esas operaciones no son necesarias, es algo
normal en los programas Objective-C y por ello lo incluimos en este
Hola Mundo.
SOY NOVATO
Los programas Objective-C utilizan el caracter
@para acceder a funciones específicas del lenguaje y diferenciarlas del C estándar. Por ejemplo, en nuestro programa de ejemplo, al anteponer la arroba a la cadena de caracteres le estamos diciendo al compilador que lo que queremos es que genere un objeto de la claseNSStringen lugar de una cadena de caracteres C estándar (una secuencia de bytes en una determinada posición de memoria terminada con el caracter\0).
Para poder utilizar Objective-C y las librerías estándar debemos instalar los siguientes paquetes:
gnustep-devel y gobjc
Para distribuciones basadas en Debian.
$ apt install gnustep-devel gobjc
Los programas Objective-C suelen utilizar la extensión .m. Para
compilar el programa Hola Mundo debemos utilizar una
instrucción como la siguiente.
$ gcc -o helloGS hello.m `gnustep-config --objc-flags` \
> -L/usr/lib/GNUstep/ -lgnustep-base -lobjc
Objective-C fue creado principalmente por Brad Cox y Tom Love a principios de los 80 en su propia compañía llamada Productivity Product International. Objective-C buscaba aunar la potencia del lenguaje Smalltalk y la compatibilidad con C que en aquel momento era muy importante.
Al igual que con C y C++, Objective-C fue inicialmente descrito en un libro titulado Object-Oriented Programming, An Evolutionary Approach publicado en 1986.
Fue en 1988 cuando NeXT licenció Objective C de sus creadores. La compañía ahora se llamaba StepStone. NeXT desarrollo el AppKit y el Foundation Kit, algo así como el equivalente a la librería C estándar o las STL de C++ y las utilizó para desarrollar NeXTStep.
En 1996, Apple compró NeXT y utilizó OpenStep (la especificación de NeXTStep para utilizarlo en otros sistemas) para desarrollar Mac OSX, el cual incluía herramientas de desarrollo para Objective-C. Eventualmente esas herramientas convergieron en XCode y mucho del trabajo desarrollado por NeXT acabo en los APIs Cocoa.
Resumen
- Lenguaje compilado
- Extension:
m - Terminador de líneas:
; - Agrupa instrucciones con :
{...} - Comentarios multilinea: Entre caracteres
/* */ - Comentarios misma lina:
// - Delimitador de cadenas:
"cadena¨o@"cadena" - Puedes imprimir textos con
NSLogoputs(No añade retorno de carro) - No soporta cadenas multilínea nativamente
- No soporta
HERE-DOCS - Punto de entrada:
main - Requiere definición previa de todos los elementos (ficheros include para declarar funciones)
■
