Die NSString-Methode initWithFormat:arguments: nimmt eine va_list als Argument. Ich kann nicht herausfinden, wann sie verwendet wird (oder sogar wie man sie verwendet). Warum sollte Apple eine solche Methode hinzufügen, wenn das reguläre initWithFormat: viel benutzerfreundlicher ist?
Antworten
Zu viele Anzeigen?Sie können keine dynamische Liste von Formatargumenten an -initWithFormat:
. Wenn Sie zum Beispiel Folgendes implementieren möchten -stringByAppendingFormat:
selbst ohne -initWithFormat:arguments:
dann hätten Sie eine Aufgabe zu erfüllen. Mit dem va_list
Version könnten Sie es tun:
- (NSString *)stringByAppendingFormat:(NSString *)format, ... {
va_list args;
va_start(args, format);
NSString * result = [self stringByAppendingString:[NSString stringWithFormat:format arguments:args]];
va_end(args);
return result;
}
Es ist nützlich, wenn Ihre eigene Funktion oder Methode variable Argumente verwendet, denn in diesem Fall ist es unmöglich, die Vanilla initWithFormat:
Methode.
Zum Beispiel das folgende (nutzlose) Beispiel-Snippet:
void log(NSString* format, ...)
{
va_list arguments;
va_start(arguments, format);
// impossible:
// NSString* formattedString = [[NSString alloc] initWithFormat: ???];
// possible
va_list argsCopy;
va_copy(argsCopy, arguments);
NSString* formattedString = [[NSString alloc] initWithFormat:format arguments:argsCopy];
// do something cool with your string
NSLog(@"%@", formattedString);
va_end(argsCopy);
va_end(arguments);
}
Ohne näher darauf einzugehen, würde ich sagen, dass Apple Folgendes bietet NSString initWithFormat:
als Utility-Methode zusätzlich zu NSString initWithFormat:arguements:
Das bedeutet, dass die kurze Version am Ende die längere Version anruft.
Es gibt auch [NSString stringWithFormat:], das einen automatisch ausgelösten NSString zurückgeben kann, was Ihnen die alloc
anrufen, wenn Sie die Schnur nicht lange brauchen.