in Objective-C, come fare una cosa del genere èCome compilare NSArray in fase di compilazione?
int array[] = {1, 2, 3, 4};
in puro C?
Ho bisogno di riempire NSArray con NSStrings con il più piccolo overhead (codice e/o runtime) possibile.
in Objective-C, come fare una cosa del genere èCome compilare NSArray in fase di compilazione?
int array[] = {1, 2, 3, 4};
in puro C?
Ho bisogno di riempire NSArray con NSStrings con il più piccolo overhead (codice e/o runtime) possibile.
Non è possibile creare un array come quello che si sta facendo in fase di compilazione. Questo perché non è una "costante di tempo di compilazione". Invece, si può fare qualcosa di simile:
static NSArray *tArray = nil;
-(void)viewDidLoad {
[super viewDidLoad];
tArray = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
}
se è veramente importante che si dispone di questo precompilato, allora penso che si potrebbe creare un progetto di prova, creare l'array (o qualunque oggetto) è necessario, riempirlo, poi serializzarlo usando NSKeyedArchiver (che lo salverà in un file), quindi includerlo nella tua app. Sarà quindi necessario utilizzare NSKeyedUnarchiver per annullare l'archiviazione dell'oggetto per l'uso. Non sono sicuro di quale sia la differenza di prestazioni tra questi due approcci. Un vantaggio di questo metodo è che non si dispone di un grande blocco di codice se è necessario inizializzare un array che include molti oggetti.
uso questo
NSArray *array = [NSArray arrayWithObjects:str1,str2, nil];
Vale la pena notare che 'str1, str2 ...' possono essere letterali NSString come '@" una stringa "', nello stesso modo in cui sarebbero per un inizializzatore di array C. I * think * tali stringhe saranno in fase di compilazione nell'immagine. Non pensare di poter inizializzare l'array da solo, a parte il runtime, anche se, almeno non senza un brutto attacco di serializzazione. – walkytalky
Questo non funziona per me. Ho fatto NSArray * a = [array NSArrayWithObjects: @ "foo", @ "bar", @ "baz", nil]; e il compilatore dice "L'elemento Initializer non è una costante in fase di compilazione". Ho bisogno di condividere l'array tra più routine in un modulo, quindi voglio che l'array sia dichiarato e compilato all'esterno di qualsiasi routine ... – MoreFamed
-1 Come sottolineato da MoreFamed, questo non funzionerà assolutamente come lui ha bisogno. Il tuo codice * funzionerebbe * se avesse solo bisogno di accedere a 'array' in un unico metodo, ma ha bisogno di accedervi attraverso la sua classe. – FreeAsInBeer
Per quanto ho capito è necessario una matrice tridimensionale È possibile utilizzare i metodi della classe di NSArray .. Per esempio
NSString *yourString;
NSArray *yourArray = [[NSArray alloc] initWithObjects:yourString, nil];
Se avete bisogno di più, per favore fornire ulteriori dettagli sul problema
-1 La tua risposta ha lo stesso problema di @ sheraza. Non fornirà l'accesso alla matrice attraverso l'intera classe. – FreeAsInBeer
Semplice come quello: NSArray<NSString*> *stringsArray = @[@"Str1", @"Str2", @"Str3", ...];
Modern ObjectiveC consente generici e array letterali.
Se si desidera un codice più breve, quindi NSArray *stringsArray = @[@"Str1", @"Str2", @"Str3", ...];
, i generici sono facoltativi e aiutano solo quando si accede agli elementi dell'array, quindi è possibile ricondurre in seguito il codice all'array templatizzato.
Non è importante averlo precompilato, quindi la tua soluzione funziona perfettamente per me. Grazie! – MoreFamed
Questo crea l'array ogni volta che viene eseguito 'viewDidLoad', un test' nil' sarebbe buono. – Cristik