Come concatenare stringa in Objective-C (iPhone)? [duplicare]
-
18-09-2019 - |
Domanda
Eventuali duplicati:
Come faccio a concatenare stringhe in Objective-C?
In primo luogo, la piattaforma è iPhone e Label.text cambia l'etichetta visualizzata. Si consideri questo scenario:
Ho un array di interi. E voglio visualizzarlo sullo schermo.
Ecco il mio prendere su di esso:
-(IBAction) updateText: (id)sender {
int a[2];
a[0]=1;
a[1]=2;
a[2]=3;
for (int i=0; i<=10;i++)
label.text = [NSString stringByAppendingString: [NSString stringWithFormat: @"%i", a[i]]];
}
Come si può probabilmente vedere, io sono abbastanza confuso. Pls pls help me out: (
Soluzione
Prova questo:
NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
[theString appendString:[NSString stringWithFormat:@"%i ",i]];
}
label.text = theString;
Altri suggerimenti
Dal momento che si sta utilizzando un ciclo, non essere un po 'attenti sia con Tom e soluzioni di Benjie. Ognuno di essi creano un oggetto autoreleased in più per ogni iterazione. Per un piccolo ciclo, va bene, ma se la dimensione del ciclo è illimitato o se le stringhe sono di grandi dimensioni, questo può portare a un grande picco di memoria e le prestazioni di successo. In particolare su iPhone, questo è esattamente il tipo di ciclo che può portare a problemi di memoria sorprendenti a causa di picchi di memoria di breve durata.
La seguente soluzione ha una minor richiesta di memoria (è anche leggermente più veloce e richiede meno di battitura). Si noti la chiamata a -appendFormat:
piuttosto che -appendString
. Questo evita la creazione di una seconda stringa che verrà gettato via. Ricordate che la stringa finale ha uno spazio aggiuntivo alla fine che si può decidere di sbarazzarsi. È possibile risolvere che sia trattando la prima o l'ultima iterazione in modo diverso, o tagliando l'ultimo spazio dopo il ciclo.
NSMutableString* theString = [NSMutableString string];
for (int i=0; i<=10;i++){
[theString appendFormat:@"%i ",i];
}
label.text = theString;
Non dimenticare [NSArray componentsJoinedByString:]
. In questo caso non si dispone di un NSArray, ma nei casi più comuni in cui si fa, questo è probabilmente il modo migliore per ottenere quello che stai cercando.
//NSArray *chunks
string = [chunks componentsJoinedByString: @","];
Un altro metodo senza utilizzare NSMutableString:
NSString* theString = @"";
for (int i=0; i<=10;i++){
theString = [theString stringByAppendingFormat:@"%i ",i];
}
label.text = theString;
Ecco una piena attuazione (correggendo gli intervalli):
-(IBAction) updateText: (id)sender {
int a[3];
a[0]=1;
a[1]=2;
a[2]=3;
NSString *str = @"";
for (int i=0; i<3;i++)
str = [str stringByAppendingFormat:@"%i ",i];
label.text = str;
}
Si potrebbe anche fare in questo modo (ad esempio, se si voleva un elenco separato da virgola):
-(IBAction) updateText: (id)sender {
int a[3];
a[0]=1;
a[1]=2;
a[2]=3;
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3];
for (int i=0; i<3;i++)
[arr addObject:[NSString stringWithFormat:@"%i",i]];
label.text = [arr componentsJoinedByString:@", "];
}