La méthode NSString initWithFormat: arguments: prend une va_list comme argument. Je ne peux pas comprendre quand il serait utilisé (ou même comment l'utiliser). Pourquoi Apple ajouterait-il une telle méthode lorsque le initWithFormat habituel: est beaucoup plus convivial?Quand est-ce que initWithFormat: arguments: serait utilisé?
Répondre
Vous ne pouvez pas passer une liste dynamique des arguments de format à -initWithFormat:
. Par exemple, si vous vouliez implémenter -stringByAppendingFormat:
vous-même sans -initWithFormat:arguments:
, vous auriez un travail. Avec la version va_list
, vous pouvez le faire:
- (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;
}
Je dirais sans regarder plus loin que Apple fournit NSString initWithFormat:
comme méthode utilitaire au-dessus de NSString initWithFormat:arguements:
ce qui signifie que la version courte finit par appeler le plus long.
Il y a aussi [NSString stringWithFormat:] qui peut renvoyer un NSString auto-libéré, en vous sauvant l'appel alloc
si vous n'avez pas besoin de la chaîne pour longtemps.
Il est utile lorsque votre propre fonction ou méthode utilise des arguments variadiques, car dans ce cas il est impossible d'utiliser la méthode initWithFormat:
de vanilla.
Par exemple, les éléments suivants (inutile) Exemple d'extrait:
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. Quand une bascule Ruby serait-elle utile?
- 2. Quand une variable d'instance serait-elle utilisée et quand une propriété serait-elle utilisée?
- 3. Quand un initform est-il utilisé?
- 4. Quand est-ce que CanFreeze doit être utilisé?
- 5. Quand NSObject ne serait-il pas déclaré en tant que classe parente?
- 6. Instantiation explicite - quand est-il utilisé?
- 7. Quand est-ce que Distinct (IEqualitComparer) serait pris en charge dans NHibernate.Linq?
- 8. Quand est-ce que la méthode d'élimination ne serait pas appelée?
- 9. Quand utiliser `constamment` dans clojure, comment et quand ses arguments sont-ils évalués?
- 10. Je pensais que cette analyse serait simple
- 11. Que serait la regex pour ça?
- 12. Est-ce que quelqu'un a utilisé "hstart.exe"?
- 13. NSString * string = @ "someString" vs NSString * string = [[alloc NSString] initWithFormat @ "% @", string]
- 14. Est-ce que Terracotta est utilisé professionnellement?
- 15. Que prend python.exe comme arguments?
- 16. Fonction Python me disant que j'ai envoyé deux arguments quand j'en ai envoyé un seul
- 17. Qu'est-ce que fpmake.pp utilisé et est-il toujours utilisé?
- 18. Est-ce que StackTrace peut être utilisé quand <compilation debug = "true"> dans web.config?
- 19. Que signifie i_tmp2 lorsqu'il est utilisé en tant que variable?
- 20. Quand "Unknown" doit-il être utilisé comme paramètre -Encoding?
- 21. Quand StringBuffer/StringBuilder n'est pas implicitement utilisé par le compilateur?
- 22. Quand `new` devrait-il être utilisé dans Go?
- 23. quand passer les arguments de fonction par référence et quand par adresse?
- 24. Arguments Javascript en tant que tableau?
- 25. Quand le type var devrait-il être utilisé dans C#?
- 26. Pourquoi "quand" est-il utilisé dans cette fonction?
- 27. Quand un moteur de règles métier est-il utilisé
- 28. Quand avez-vous utilisé la programmation dynamique sur le terrain?
- 29. Pourquoi Python dit que pow n'a que 2 arguments
- 30. Est-ce que ce script mIRC serait possible? comment difficile?
Bonne réponse, merci. – calvinlough