Archiviazione dei dati in Objective-C

La memorizzazione dei dati e il loro recupero è una delle più importanti in qualsiasi programma. In Objective-C, generalmente non dipendiamo da strutture come la lista collegata poiché rende il lavoro complesso. Invece, usiamo le raccolte come NSArray, NSSet, NSDictionary e le sue forme mutabili.

NSArray e NSMutableArray

NSArray viene utilizzato per contenere un array di oggetti immutabile e NSMutableArray viene utilizzato per contenere un array mutabile di oggetti.

La mutabilità aiuta a cambiare l'array in runtime un array preallocato, ma se usiamo NSArray, sostituiamo solo l'array esistente e non possiamo cambiare il contenuto dell'array esistente.

Metodi importanti di NSArray sono i seguenti

  • alloc/initWithObjects - Utilizzato per inizializzare un array con oggetti.

  • objectAtIndex - Restituisce l'oggetto a un indice specifico.

  • count - Restituisce il numero di oggetti

NSMutableArray è ereditato da NSArray e quindi tutti i metodi di istanza di NSArray sono disponibili in NSMutableArray

Metodi importanti di NSMutableArray sono i seguenti:

  • removeAllObjects - Svuota l'array.

  • addObject - Inserisce un determinato oggetto alla fine dell'array.

  • removeObjectAtIndex - Questo è usato per rimuovere objectAt un indice specifico

  • exchangeObjectAtIndex:withObjectAtIndex - Scambia gli oggetti nell'array a determinati indici.

  • replaceObjectAtIndex:withObject - Sostituisce l'oggetto all'indice con un oggetto.

Dobbiamo ricordare che l'elenco sopra è solo i metodi usati di frequente e possiamo saltare nelle rispettive classi nel nostro XCode per conoscere più metodi in queste classi. Di seguito viene mostrato un semplice esempio.

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

Ora, quando compiliamo ed eseguiamo il programma, otterremo il seguente risultato.

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

Nel programma precedente, abbiamo visto una semplice differenziazione tra NSMutableArray e NSArray dove possiamo inserire una stringa dopo l'allocazione in un array mutabile.

NSDictionary e NSMutableDictionary

NSDictionary viene utilizzato per contenere un dizionario immutabile di oggetti e NSMutableDictionary viene utilizzato per contenere un dizionario mutabile di oggetti.

Metodi importanti di NSDictionary sono i seguenti:

  • alloc/initWithObjectsAndKeys - Inizializza un dizionario appena allocato con voci costruite dal set di valori e chiavi specificato.

  • valueForKey - Restituisce il valore associato a una determinata chiave.

  • count - Restituisce il numero di voci nel dizionario.

NSMutableDictionary è ereditato da NSDictionary e quindi tutti i metodi di istanza di NSDictionary sono disponibili in NSMutableDictionary

Metodi importanti di NSMutableDictionary sono i seguenti:

  • removeAllObjects - Svuota il dizionario delle sue voci.

  • removeObjectForKey - Rimuove una determinata chiave e il valore associato dal dizionario.

  • setValue:forKey - Aggiunge una data coppia chiave-valore al dizionario.

Di seguito è mostrato un semplice esempio di dizionario:

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

Ora, quando compiliamo ed eseguiamo il programma, otterremo il seguente risultato.

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 viene utilizzato per contenere un insieme immutabile di oggetti distinti e NSMutableDictionary viene utilizzato per contenere un insieme modificabile di oggetti distinti.

I metodi importanti di NSSet sono i seguenti:

  • alloc/initWithObjects - Inizializza un nuovo insieme allocato con membri presi dall'elenco di oggetti specificato.

  • allObjects - Restituisce un array contenente i membri del set o un array vuoto se il set non ha membri.

  • count - Restituisce il numero di membri nel set.

NSMutableSet viene ereditato da NSSet e quindi tutti i metodi di istanza di NSSet sono disponibili in NSMutableSet.

I metodi importanti di NSMutableSet sono i seguenti:

  • removeAllObjects - Svuota l'insieme di tutti i suoi membri.

  • addObject - Aggiunge un determinato oggetto al set, se non è già un membro.

  • removeObject - Rimuove un determinato oggetto dal set.

Di seguito è mostrato un semplice esempio di set:

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

Ora, quando compiliamo ed eseguiamo il programma, otterremo il seguente risultato.

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)