Armazenamento de dados em Objective-C

O armazenamento de dados e sua recuperação são os mais importantes em qualquer programa. Em Objective-C, geralmente não dependemos de estruturas como lista vinculada, pois torna o trabalho complexo. Em vez disso, usamos coleções como NSArray, NSSet, NSDictionary e suas formas mutáveis.

NSArray e NSMutableArray

NSArray é usado para conter uma matriz imutável de objetos e o NSMutableArray é usado para conter uma matriz mutável de objetos.

A mutabilidade ajuda a alterar o array em tempo de execução de um array pré-alocado, mas se usarmos NSArray, apenas substituiremos o array existente e não podemos alterar o conteúdo do array existente.

Métodos importantes de NSArray são os seguintes

  • alloc/initWithObjects - Usado para inicializar uma matriz com objetos.

  • objectAtIndex - Retorna o objeto em um índice específico.

  • count - Retorna o número de objetos

NSMutableArray é herdado de NSArray e, portanto, todos os métodos de instância de NSArray estão disponíveis em NSMutableArray

Métodos importantes de NSMutableArray são os seguintes -

  • removeAllObjects - Esvazia o array.

  • addObject - Insere um determinado objeto no final da matriz.

  • removeObjectAtIndex - Isso é usado para remover objectAt um índice específico

  • exchangeObjectAtIndex:withObjectAtIndex - Troca os objetos na matriz em determinados índices.

  • replaceObjectAtIndex:withObject - Substitui o objeto no índice por um Objeto.

Temos que lembrar que a lista acima é apenas os métodos usados ​​com freqüência e podemos pular para as respectivas classes em nosso XCode para saber mais métodos nessas classes. Um exemplo simples é mostrado abaixo.

#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;
}

Agora, quando compilarmos e executarmos o programa, obteremos o seguinte 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

No programa acima, vimos uma diferenciação simples entre NSMutableArray e NSArray, onde podemos inserir uma string após a alocação em um array mutável.

NSDictionary e NSMutableDictionary

NSDictionary é usado para conter um dicionário imutável de objetos e o NSMutableDictionary é usado para conter um dicionário mutável de objetos.

Métodos importantes de NSDictionary são os seguintes -

  • alloc/initWithObjectsAndKeys - Inicializa um dicionário recém-alocado com entradas construídas a partir do conjunto especificado de valores e chaves.

  • valueForKey - Retorna o valor associado a uma determinada chave.

  • count - Retorna o número de entradas no dicionário.

NSMutableDictionary é herdado de NSDictionary e, portanto, todos os métodos de instância de NSDictionary estão disponíveis em NSMutableDictionary

Métodos importantes de NSMutableDictionary são os seguintes -

  • removeAllObjects - Esvazia o dicionário de suas entradas.

  • removeObjectForKey - Remove uma determinada chave e seu valor associado do dicionário.

  • setValue:forKey - Adiciona um determinado par de valores-chave ao dicionário.

Um exemplo simples de dicionário é mostrado abaixo -

#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;
}

Agora, quando compilarmos e executarmos o programa, obteremos o seguinte 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 e NSMutableSet

NSSet é usado para conter um conjunto imutável de objetos distintos e o NSMutableDictionary é usado para conter um conjunto mutável de objetos distintos.

Métodos importantes de NSSet são os seguintes -

  • alloc/initWithObjects - Inicializa um conjunto recém-alocado com membros retirados da lista de objetos especificada.

  • allObjects - Retorna um array contendo os membros do conjunto ou um array vazio se o conjunto não possui membros.

  • count - Retorna o número de membros no conjunto.

NSMutableSet é herdado do NSSet e, portanto, todos os métodos de instância do NSSet estão disponíveis no NSMutableSet.

Métodos importantes de NSMutableSet são os seguintes -

  • removeAllObjects - Esvazia o conjunto de todos os seus membros.

  • addObject - Adiciona um determinado objeto ao conjunto, se ainda não for um membro.

  • removeObject - Remove um determinado objeto do conjunto.

Um exemplo simples para conjuntos é mostrado abaixo -

#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;
}

Agora, quando compilarmos e executarmos o programa, obteremos o seguinte 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)