9 Stimmen

Wann sollte initWithFormat:arguments: verwendet werden?

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?

12voto

John Calsbeek Punkte 35029

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;
}

3voto

zneak Punkte 129366

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);
}

0voto

Jessedc Punkte 11929

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X