Die NSString-Methode initWithFormat: arguments: verwendet eine va_list als Argument. Ich kann nicht herausfinden, wann es verwendet werden würde (oder sogar wie man es benutzt). Warum würde Apple eine solche Methode hinzufügen, wenn das reguläre initWithFormat: viel benutzerfreundlicher ist?Wann würde initWithFormat: Argumente: verwendet werden?
Antwort
Sie nicht eine dynamische Liste von Format Argumente -initWithFormat:
passieren kann. Zum Beispiel, wenn Sie -stringByAppendingFormat:
selbst ohne -initWithFormat:arguments:
implementieren möchten, würden Sie eine Arbeit davon haben. Mit der 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;
}
Ich würde sagen, ohne weiter darauf zu schauen, dass Apple NSString initWithFormat:
als eine Hilfsmethode auf NSString initWithFormat:arguements:
bereitstellt, was bedeutet, dass die kurze Version nur endet, die längere anrufend.
Es gibt auch [NSString stringWithFormat:], das einen automatisch freigegebenen NSString zurückgeben kann, wodurch Sie den Aufruf alloc
speichern, wenn Sie die Zeichenfolge nicht lange brauchen.
Es ist nützlich, wenn Ihre eigene Funktion oder Methode variadic Argumente verwendet, denn in diesem Fall ist es unmöglich, die Vanilla initWithFormat:
Methode zu verwenden.
Zum Beispiel die folgenden (nutzlosen) 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);
}
- 1. Small Basic - Wann würde "Graduate" verwendet werden?
- 2. Wann muss -halteCount verwendet werden?
- 3. Wann würde eine Referenz Null initialisiert werden?
- 4. Wann würde entsorgen Methode nicht aufgerufen werden?
- 5. Wann sollte WS_EX_NOREDIRECTIONBITMAP verwendet werden?
- 6. Wann werden assoziative Entitäten verwendet?
- 7. Wann sollte wkWebView verwendet werden?
- 8. Wann sollten Speicherkarten verwendet werden?
- 9. Wann sollte StringBuilder verwendet werden?
- 10. Wann sollte FOUNDATION_EXPORT verwendet werden?
- 11. Wann sollte Flask.g verwendet werden?
- 12. Wann sollte $ .extend ({...}) verwendet werden?
- 13. Wann sollte range.value verwendet werden?
- 14. Wann sollte ein IOC-Container verwendet werden?
- 15. Wann sollte std :: atomic_compare_exchange_strong verwendet werden?
- 16. Wann sollte dies-> verwendet werden?
- 17. Wann sollte ein neuer Ausnahmetyp verwendet werden?
- 18. Würde Nhibernate in großen Projekten wie Facebook verwendet werden? (Für Argumente willen)
- 19. Wann sollten Named Pipes in Windows verwendet werden?
- 20. Wann statische Variablen/Methoden verwendet werden sollen und wann Instanzvariablen/Methoden in Java verwendet werden sollen?
- 21. Wann @ in einer Rails-Ansicht verwendet werden soll und wann ein Symbol verwendet werden soll?
- 22. Dolch 2: Wann werden Konstruktorinjektionen und wann Feldinjektionen verwendet?
- 23. Wann sollte das Schlüsselwort "as" und wann() Casting verwendet werden?
- 24. Wann würde ShowDialog() null zurückgeben?
- 25. Wann würde SqlCommand.ExecuteReader() null zurückgeben?
- 26. Anwendungsdesign - Wann sollten Schnittstellen verwendet werden?
- 27. Wann Anwendungskontext in Springs verwendet werden soll.
- 28. Wann sollten schwache Referenzen verwendet werden?
- 29. Wann sollte in Rust inline verwendet werden?
- 30. Wann sollte dynamic_cast der Referenz verwendet werden?
Große Antwort, danke. – calvinlough