Objective-C array primitivi
-
20-09-2019 - |
Domanda
Voglio avere una matrice mutevole con primitive in obj-c (selettori). Qual è il metodo consigliato per fare questo? NSArray
e questi possono contenere solo gli oggetti.
Soluzione
Si dovrebbe utilizzare un NSValue
per avvolgere il selettore o di qualsiasi altro tipo primitivo è necessario. In cacao SEL è una sorta di puntatore, in modo da poter utilizzare [NSValue valueWithPointer:whatever]
per costruire e [value pointerValue]
per farlo fuori. O, in generale, è possibile utilizzare [NSValue valueWithBytes:&whatever objCType:@encode(SEL)]
; questo funziona per qualsiasi tipo.
Altri suggerimenti
Se si desidera memorizzare un array di oggetti SEL
, la cosa più semplice sarebbe quella di convertire i SEL
s per NSString
s usando la funzione NSStringFromSelector()
, conservarli in un NSMutableArray
, e poi convertirli di nuovo a SEL
s quando li si tira fuori con NSSelectorFromString()
la funzione.
Oltre a gestire un array di C-stile da soli (che sicuramente non è l'opzione migliore, IMO), l'unica opzione è quella di utilizzare NSArray
/ NSMutableArray
, e memorizzare i numeri utilizzando NSNumber
. E 'un po' più fastidioso per ottenere il valore fuori che con il tipo numerico effettivo, ma lo fa gratis si dalla gestione della memoria della matrice da soli.
Dal momento che i tipi primitivi sono generalmente solo numeri (suddivisi in numero intero o in virgola mobile) o puntatori, qual è il problema con l'utilizzo delle classi utilizzate per avvolgere quelli per i vostri scopi? Un NSMutableArray
di NSNumbers
, per esempio?