Ho definito una macro MYMACRO. Nota: il valore non è una NSString valida.Come espandere una MACRO in NSString senza utilizzare alcuna concatenazione di stringhe in fase di runtime?
#define MYMACRO is
La macro viene utilizzato all'interno la dichiarazione di un NSString
@"This MYMACRO fun"
Tuttavia, il preprocessore non espande la macro. Il risultato pre-elaborato è
@"This MYMACRO fun"
La soluzione migliore che ho trovato finora per ottenere la macro di espandersi è:
#define MYMACRO @"is"
@"This "[email protected]" fun"
La macro si espande, come di seguito che è una valida la sintassi Objective-C:
@"This "@"is"@" fun"
Tuttavia, ciò richiede 2 concatenazioni in fase di esecuzione.
Quindi la mia domanda è come inserire una macro in un NSString senza utilizzare alcuna concatenazione di stringhe in fase di esecuzione?
Idealmente, vorrei che il tempo di esecuzione eseguire @"This is fun"
piuttosto che @"This "@"is"@" fun"
Sei corretto. Se si genera l'assembly per il codice che fa una concatenazione come questa, si può vedere che finisce come una stringa .asciiz. – UIAdam
Penso che valga anche la pena di aggiungere che anche se la concatenazione è avvenuta in fase di esecuzione, non vale la pena arrendersi all'indietro per scrivere qualche brutta macro solo per salvare alcune operazioni con le stringhe. Scrivi prima il codice chiaro e poi preoccupati delle prestazioni. Personalmente guarderei usando stringWithFormat per inserire una NSString all'interno di un'altra. – UIAdam
@AdamW: Vuoi dire che il compilatore ottimizza @ "Questo" @ "è" @ "divertente" in @ "Questo è divertente" al momento della compilazione? Sono d'accordo con te, preferisco avere un semplice codice sorgente invece di salvare alcune operazioni con le stringhe. Sto cadendo nell'ottimizzazione prematura e sappiamo tutti cosa significa: "L'ottimizzazione prematura è la radice di tutti i mali - D. Knuth" –