Otro borrego más

A veces, me pongo a pensar y si que milagro porque es lo que todos evadimos.

Pensar en algo más allá de las tareas cotidianas y lo que tengo en frente, en el sentido de mi vida y de mi existencia.

Esto es un camino peligroso, porque puedo caer en un limbo de preguntas sin respuesta.

Que define la felicidad de las personas, ¿lo material? ¿el trabajo? ¿las relaciones con otras personas? ¿porque?

  • ¿porque lo dijo alguien y los demás le hicieron caso?

Lo románticos dirían que el amor, y me quedo sin comentarios. ¿en serio?

A veces simplemente, siento que nada tiene sentido.

Lo único que me llena de ganas para seguir, con esta gran obra es la posibilidad de hacer una diferencia y no pasar por esta tierra como otro borrego más.

Delegados, Objective C

De mis cosas favoritas de Objective C, son los delegados  los cuales son muy útiles para comunicar dos clases o para notificar a otras clases de algún cambio o algún evento en específico.

Para empezar debemos definir un protocolo esto puede ir en el header de la clase por ejemplo:

@protocol MiDelegado
@optional
- (void) didReceiveData: (NSData *) theData;
@end

la clase que quiera ser notificada de los eventos deberá implementar el protocolo.
el “@optional” es solo para indicar que no es necesario que implemente el método.

Por otra parte la clase que contenga el protocolo debe de tener una referencia al objecto que implementa el protocolo, dentro de sus variables de instancia:

id <MiDelegado> delegate;

este variable debe de ser una propiedad para tener su “getter” y “setter” y que pueda ser accesada por la clase que implementa el protocolo:

@property (retain) id delegate;

esto sería todo en cuanto al header y ahora en el archivo de implementación lo primero que debemos de hacer es poner “synthesize” del delegate (para que se creen el “getter” y el “setter”):

@synthesize delegate;

después agregar este método como definición, a mi me gusta de esta manera ya que resalta al estar de otro como pero igual y puede ser un método como cualquier otro:

#define DELEGATE_CALLBACK(X, Y) if (self.delegate && [self.delegate respondsToSelector:@selector(X)]) [self.delegate performSelector:@selector(X) withObject:Y];

Explicando un poco el método anterior lo único que hace es revisar que el delegado responda al método (es decir que si lo tenga implementado) y lo manda a llamar.

Y el último paso es mandar a llamar el método una vez que el proceso que se esté ejecutando haya terminado que en este caso sería cuando el archivo se acabe de descargar:

DELEGATE_CALLBACK(didReceiveData:, theData);

Le he encontrado muchos usos a los delegados, espero igual te ayuden en algo y bueno por último gustaría mencionar que encontré esto en  el código de Erica Sadun en el material de apoyo de su libro iPhone Developer’s Cookbook, 3.0 Edition

Clases y métodos, Objective C

Para crear una clases en Objective C debemos crear dos archivos con el nombre de la clase uno con la extensión “.h” y otro con la extensión “.m”.

En el archivo de extensión “.h” se define la estructura de la clase, las variables de instancia y los métodos a implmentar.
También se definen, las propiedades. Las propiedades son un manera de hacer pública una variable de instacia ya que al declararla se crean los métodos get y set de la variable. También más adelante veremos que son la base para hacer la conexión entre la interfaz y el código si es que usamos el Interface Builder.

Aquí un ejemplo de un archivo de extensión “.h”:

#import 
@interface MiClase : NSObject {    
          NSString *nombre;
 } 

@property(nonatomic,retain) NSString *nombre; 

- (void) miMetodo: (NSString *) valor; 

@end

Explicación por línea:
1.- se importa el framework base de Objective C (nota: los frameworks se importan con < ...> y las clases con “…”).
2.- se declara la interface @interface seguida por el nombre de la clase los dos puntos indican herencia de la clase NSObject.
3.- una variable de instancia de tipo NSString
6.- una propiedad de tipo NSString
8.- la definción de un método (se explica más adelante)
9.- indica el final del documento

Por otro lado tenemos el archivo de extensión “.m”
En este archivo se implementan los métodos definidos en el archivo “.h” el cual se debe de importar en este archivo. Y para la propiedades declaradas estas se deben de sintetizar para que se creen los metodos get y set.

y aquí el ejemplo del archivo de implementación, del archivo anterior:

#import “MiClase.h”
 @implementation MiClase
 @synthesize nombre;

 - (void) miMetodo: (NSString *) valor {    
         // implementación
 }

 @end

Explicación por línea:
1.- se importa el archivo de extensión “.h” donde se define la clase
2.- se indica que es un implementación de la clase
3.- se sintetizan las propiedades declaradas
5.- la implementación del método definido.
9.- indica el final del documento

20110317-080623.jpg

esta imagen es de una ref card de DZone muy recomendada, les dejo la liga:
http://refcardz.dzone.com/refcardz/objective-c-iphone-and-ipad

Tipos de datos, Objective C

Primitivas:

Igual que en cualquier lenguaje:

  • int: valor entero
  • float: número con punto flotante
  • double: número con punto flotante de doble tamaño y precisión
  • char: un caracter por ejemplo ‘a’
  • BOOL : un booleano con valor YES(1) o NO(0)

Estas primitivas las tiene cualquiera de los lenguajes de programación el único distinto es el booleano que tiene valores de YES/NO en lugar de TRUE/FALSE y la definición es con BOOL en mayúsculas, aqui explican las diferencia entre BOOL y bool.

Objetive c utiliza una notación de corchetes para las llamadas a metodos como por ejemplo:

//arreglo es un objeto y count es unos de sus métodos
[arreglo count]

Los tipos de objetos básicos en Objetive C:

  • NSObject: el tipo de dato más básico del cual todos heredan.
  • NSString: cadena de caracteres, a diferencia de los demás lenguajes se debe anteponer una @ por ejemplo
  • //se antepone la @ a la comilla
    /** todos los objetos es decir las NO primitivas llevan 
    un * en su definición ya que son apuntadores.**/
    NSString *string = @"Hola mundo";
  • NSArray: una colección de elementos de tamaño fijo que pueden ser duplicados.
  • NSMutableArray: es un arreglo pero de tamaño variable.
  • /** los arreglos mutables son los más usados, 
    aunque  si se sabe que el arreglo no se modifica en el código se
    debe usar NSArray **/
    
    NSMutableArray  *arreglo =[ [NSMutableArray alloc] init];
    
    /**
    Al ser un objeto debe de llevar * ya que es un apuntador.
    - el alloc es para que se haga espacio en memoria
     y se reserve para este objeto.
    - el init es el constructor por defecto.
    **/
  • NSDictionary: una colección de llave valor de tamaño fijo.
  • NSMutableDictionary: un NSDictionary de tamaño variable.
  • NSSet: una colección de datos únicos sin orden.
  • NSData: datos en bytes (binario).
  • NSURL: objeto de tipo URL.

Estos son algunos de los tipos de datos más usados, pero existen muchos más.

Introducción, Objective C

Objective C, es un lenguaje de programación orientado a objetos (OOP) basado en C.

Si ya conoces algún lenguaje de programación orientado a objetos (C++, Java, C#…), aprender Objetive C es relativamente sencillo, solo sería cosa de aprender la sintáxis que es un poco diferente al ser un lenguaje auto-descriptivo con un formato un poco diferente a los demás.

Si no conoces nada de programación orientada a objetos puede ser un poco tardado ya que no es el lenguaje más amigable para aprender pero se puede.

Aquí una liga con conceptos básicos de OOP en Java.

Hay muchos libros buenos para aprender Objetive C desde cero, aquí algunos:

En este blog, va ser un guía rápida/prática para quienes ya estén familiarizados con el prádigma, con ejemplos, trucos y sugerencias para la creación de una applicación para iOS.

Programación

Hola en este blog voy a tratar temas de programación en general, que es mi pasión y más que nada enfocado en Objective C para iOS que es lo que he estado trabajando últimamente, bienvenido todo amante de la programación.