Almacenamiento de datos en Objective-C

El almacenamiento de datos y su recuperación es uno de los más importantes en cualquier programa. En Objective-C, generalmente no dependemos de estructuras como la lista enlazada, ya que hace que el trabajo sea complejo. En su lugar, usamos colecciones como NSArray, NSSet, NSDictionary y sus formas mutables.

NSArray y NSMutableArray

NSArray se usa para contener una matriz inmutable de objetos y NSMutableArray se usa para contener una matriz mutable de objetos.

La mutabilidad ayuda a cambiar la matriz en tiempo de ejecución, una matriz preasignada, pero si usamos NSArray, solo reemplazamos la matriz existente y no podemos cambiar el contenido de la matriz existente.

Los métodos importantes de NSArray son los siguientes

  • alloc/initWithObjects - Se utiliza para inicializar una matriz con objetos.

  • objectAtIndex - Devuelve el objeto en un índice específico.

  • count - Devuelve el número de objetos

NSMutableArray se hereda de NSArray y, por lo tanto, todos los métodos de instancia de NSArray están disponibles en NSMutableArray

Los métodos importantes de NSMutableArray son los siguientes:

  • removeAllObjects - Vacía la matriz.

  • addObject - Inserta un objeto dado al final de la matriz.

  • removeObjectAtIndex - Esto se usa para eliminar objetos en un índice específico

  • exchangeObjectAtIndex:withObjectAtIndex - Intercambia los objetos en la matriz en índices dados.

  • replaceObjectAtIndex:withObject - Reemplaza el objeto en el índice con un Objeto.

Tenemos que recordar que la lista anterior son solo los métodos de uso frecuente y podemos saltar a las clases respectivas en nuestro XCode para conocer más métodos en estas clases. A continuación se muestra un ejemplo sencillo.

#import <Foundation/Foundation.h>

int main() {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   NSArray *array = [[NSArray alloc]
   initWithObjects:@"string1", @"string2",@"string3",nil];
   NSString *string1 = [array objectAtIndex:0];
   NSLog(@"The object in array at Index 0 is %@",string1);
   
   NSMutableArray *mutableArray = [[NSMutableArray alloc]init];
   [mutableArray addObject: @"string"];
   string1 = [mutableArray objectAtIndex:0];
   NSLog(@"The object in mutableArray at Index 0 is %@",string1); 
   
   [pool drain];
   return 0;
}

Ahora, cuando compilemos y ejecutemos el programa, obtendremos el siguiente resultado.

2013-09-29 02:33:23.195 demo[3487] The object in array at Index 0 is string1
2013-09-29 02:33:23.196 demo[3487] The object in mutableArray at Index 0 is string

En el programa anterior, hemos visto una diferenciación simple entre NSMutableArray y NSArray donde podemos insertar una cadena después de la asignación en una matriz mutable.

NSDictionary y NSMutableDictionary

NSDictionary se usa para contener un diccionario inmutable de objetos y NSMutableDictionary se usa para contener un diccionario mutable de objetos.

Los métodos importantes de NSDictionary son los siguientes:

  • alloc/initWithObjectsAndKeys - Inicializa un diccionario recién asignado con entradas construidas a partir del conjunto especificado de valores y claves.

  • valueForKey - Devuelve el valor asociado con una clave determinada.

  • count - Devuelve el número de entradas en el diccionario.

NSMutableDictionary se hereda de NSDictionary y, por lo tanto, todos los métodos de instancia de NSDictionary están disponibles en NSMutableDictionary

Los métodos importantes de NSMutableDictionary son los siguientes:

  • removeAllObjects - Vacía el diccionario de sus entradas.

  • removeObjectForKey - Elimina una clave determinada y su valor asociado del diccionario.

  • setValue:forKey : Agrega un par clave-valor determinado al diccionario.

A continuación se muestra un ejemplo sencillo de diccionario:

#import <Foundation/Foundation.h>

int main() {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
   @"string1",@"key1", @"string2",@"key2",@"string3",@"key3",nil];
   NSString *string1 = [dictionary objectForKey:@"key1"];
   NSLog(@"The object for key, key1 in dictionary is %@",string1);
   
   NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc]init];
   [mutableDictionary setValue:@"string" forKey:@"key1"];
   string1 = [mutableDictionary objectForKey:@"key1"];
   NSLog(@"The object for key, key1 in mutableDictionary is %@",string1); 
   
   [pool drain];
   return 0;
}

Ahora, cuando compilemos y ejecutemos el programa, obtendremos el siguiente resultado.

2013-09-29 02:34:50.528 demo[9135] The object for key, key1 in dictionary is string1
2013-09-29 02:34:50.528 demo[9135] The object for key, key1 in mutableDictionary is string

NSSet y NSMutableSet

NSSet se usa para contener un conjunto inmutable de objetos distintos y NSMutableDictionary se usa para contener un conjunto mutable de objetos distintos.

Los métodos importantes de NSSet son los siguientes:

  • alloc/initWithObjects - Inicializa un conjunto recién asignado con miembros tomados de la lista de objetos especificada.

  • allObjects - Devuelve una matriz que contiene los miembros del conjunto o una matriz vacía si el conjunto no tiene miembros.

  • count - Devuelve el número de miembros del conjunto.

NSMutableSet se hereda de NSSet y, por lo tanto, todos los métodos de instancia de NSSet están disponibles en NSMutableSet.

Los métodos importantes de NSMutableSet son los siguientes:

  • removeAllObjects - Vacía el conjunto de todos sus miembros.

  • addObject - Agrega un objeto dado al conjunto, si aún no es miembro.

  • removeObject - Elimina un objeto determinado del conjunto.

A continuación se muestra un ejemplo simple de conjuntos:

#import <Foundation/Foundation.h>

int main() {
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   NSSet *set = [[NSSet alloc]
   initWithObjects:@"string1", @"string2",@"string3",nil];
   NSArray *setArray = [set allObjects];
   NSLog(@"The objects in set are %@",setArray);
   
   NSMutableSet *mutableSet = [[NSMutableSet alloc]init];
   [mutableSet addObject:@"string1"];
   setArray = [mutableSet allObjects];
   NSLog(@"The objects in mutableSet are %@",setArray);
   
   [pool drain];
   return 0;
}

Ahora, cuando compilemos y ejecutemos el programa, obtendremos el siguiente resultado.

2013-09-29 02:35:40.221 demo[12341] The objects in set are (string3, string2, string1)
2013-09-29 02:35:40.222 demo[12341] The objects in mutableSet are (string1)