Subscribe Twitter Twitter

viernes, 23 de abril de 2010

Objective-C : Métodos especiales: ALLOC e INIT

El método ALLOC

Es un método de clase que se encarga de reservar memoria para un objeto concreto en función de la clase que lo invoque, éste método no es necesario implementar absolutamente nada ya que todos los objetos heredan de la clase NSObject.

Persona persona = [Persona alloc];

El método INIT

El método init es por el contrario un método de instancia y se encargará de inicializar las variables/atributos, este método se puede implementar o invocar al método init de la clase padre (NSObject), por otro lado se pueden crear los métodos de inicialización como se quiera, lo que si es cierto que suelen seguir la nomenclatura initWith(algo identificativo)

- (id) InitWithInt: (int)valor_edad {
if (self == [super init]{
edad = valor_edad;
}
}

Como ves en el ejemplo le pasamos un valor entero para inicializar en concreto la edad, por otro lado lo que devuelve es una referencia al objeto actual por decirlo de alguna manera cuando se devuelve un tipo de dato id se devuelve un objeto de la clase actual.

Finalmente con [super init] inicializas el objeto invocando al método init de la clase padre y éste te devolverá una refencia al objeto actual que será el mismo que se almacena en la variable self cuyo significado es como el this de java. Y una vez nos hemos asegurado que estamos en el objeto correcto se procede a inicializar las variables, en este caso la edad.

3 comentarios:

David Romaní dijo...

Puedes poner un ejemplo de como se crearía una instancia con el método initWithInt? Gracias.

Noemí dijo...

Hola David, por ejemplo sería algo así:

NSNumber *miObjetoNumerico = [[NSNumber alloc] initWithInt:40];

En primer lugar como ves se reserva memoria con el alloc y acontinuación se llama al método denominado initWithInt, éste método inicializa el objeto con un dato entero pasado como parámetro (el : es para indicar que le pasamos un parámetro) esto puede ser un poco lioso al principio pero es fácil cuando se le coge el traquillo :)

David Romaní dijo...

Muchísimas gracias por su atención.

Publicar un comentario