2014-12-09 8 views
5

Come inizializzare un NSArray con la dimensione solo in modo da utilizzare un ciclo for per riempirlo in seguito? Il mio ciclo for sarebbeInizializza NSArray con dimensione

for (int i = 0; i < [myArray count]; i++) { 
    myArray[i] = someData; 
} 
+0

Quindi tutte le risposte stanno dicendo che devo usare un NSMutableArray invece di un NSArray. Significa che non posso usare direttamente un NSArray per risolvere questo problema? –

+1

Un NSArray è immutabile, il che significa che il suo contenuto non può essere modificato in futuro. Questo impedisce anche che qualsiasi oggetto venga aggiunto o rimosso dalla matrice, quindi la sua lunghezza rimarrà sempre costante. Un NSMutableArray d'altra parte è mutabile in quanto gli oggetti possono sempre essere aggiunti o rimossi in qualsiasi momento anche dopo l'inizializzazione. –

+0

La mia limitazione è che non voglio che la dimensione cambi inavvertitamente, ma allo stesso tempo, voglio che l'utente sia in grado di aggiornare i valori. La matrice è una matrice booleana. Vengo da Java quindi capisci i miei problemi. NSMutableArray indica che le dimensioni possono aumentare. Quindi, come posso evitare modifiche involontarie delle dimensioni pur consentendo la modifica dei valori? –

risposta

2

NSNull è la classe usata per rappresentare un oggetto non impostato, non valida o inesistente. Pertanto è possibile eseguire il pad dell'array su una dimensione specifica utilizzando le istanze di questa classe.

NSUInteger sizeOfArray = 10; 
NSMutableArray *someArray = [NSMutableArray array]; 
for (NSUInteger i = 0; i < sizeOfArray; i++) { 
    [someArray addObject:[NSNull null]]; 
} 

Inoltre, non è possibile utilizzare la sintassi someArray[i] = xyz; se il valore nella posizione i non esiste, in quanto causerà un errore di limiti.

+0

C'è un modo per allocare un array, quindi più tardi posso fare' array [i] = obj' senza aggiungere qualcosa prima con 'addObject'? –

5

Non è necessario inizializzare con una dimensione specifica - è possibile aggiungere oggetti tardi:

NSMutableArray * myArray = [NSMutableArray array]; 

for (int i = 0; i < 100; i++) { 
    [myArray addObject:someData]; 
} 

Ci sono lievi guadagni di prestazioni se si conosce la dimensione prima del tempo:

NSMutableArray * myArray = [NSMutableArray arrayWithCapacity:100]; 

Ma questo è opzionale.