El método NSString initWithFormat: arguments: toma una va_list como argumento. No puedo entender cuándo se usaría (o incluso cómo usarlo). ¿Por qué Apple agregaría un método así cuando el initWithFormat regular es mucho más fácil de usar?¿Cuándo se utilizaría initWithFormat: arguments:?
Respuesta
no se puede pasar una lista dinámica de los argumentos de formato para -initWithFormat:
. Por ejemplo, si quiere implementar -stringByAppendingFormat:
usted mismo sin -initWithFormat:arguments:
, tendrá un trabajo. Con la versión va_list
, puede hacerlo:
- (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;
}
Yo diría sin mirar más allá que Apple proporciona NSString initWithFormat:
como un método de utilidad en la parte superior de NSString initWithFormat:arguements:
lo que significa que la versión corta acaba llamando al más largo.
También hay [NSString stringWithFormat:] que puede devolver un NSString autorellenado, guardándole la llamada alloc
si no necesita la cadena por mucho tiempo.
es útil cuando su propia función y método utiliza argumentos variadic, porque en ese caso no se puede utilizar el método de initWithFormat:
vainilla.
Por ejemplo, la (inútil) ejemplo siguiente fragmento:
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. ¿Cuándo utilizaría el localizador de servicios comunes?
- 2. stringWithFormat vs initWithFormat en NSString
- 3. Ruby to_json: methods arguments
- 4. SEL performSelector and arguments
- 5. echo that shell-escapes arguments
- 6. Ruby on Rails redirect_to arguments
- 7. throw without arguments for failure signaling
- 8. Java Invalid Command Line Arguments Excepción
- 9. Confundido en cuanto a cuándo utilizaría JMS (o una cola en general) frente a una base de datos
- 10. ¿Cuándo se crea PropertyChangedEventManager y cuándo se adjunta?
- 11. ¿Cuándo utilizaría List <KeyValuePair <T1, T2>> en lugar de Dictionary <T1, T2>?
- 12. Patrón de iterador en VB.NET (C# utilizaría el rendimiento!)
- 13. ¿Utilizaría Sql Server Compact para una aplicación de escritorio?
- 14. ¿Cuándo se configura Log4Net?
- 15. ¿Cuándo se borra localStorage?
- 16. ¿Cuándo se activará ACTION_OUTSIDE?
- 17. View.onDraw() --- ¿cuándo se llama?
- 18. ¿Cuándo se establece HttpContext.User.Identity?
- 19. ¿Cuándo se desbordará System.currentTimeMillis()?
- 20. ¿Cuándo se desacelera Response.IsClientConnected?
- 21. ¿Cuándo se requiere "auto"?
- 22. Eliminar, ¿cuándo se llama?
- 23. ¿Cuándo se necesita NSCopying?
- 24. Evaluar: ¿cuándo se usa?
- 25. ¿Cuándo se requiere IPPROTO_UDP?
- 26. ¿Cuándo se usa StringIO?
- 27. ¿Por qué prefiere currying to tuple arguments en OCaml?
- 28. ¿Cómo utilizaría un seguimiento de auditoría para mostrar qué campos se han editado alguna vez?
- 29. ¿Cuáles son los escenarios en los que se utilizaría Sinatra o Merb?
- 30. ¿Utilizaría la arquitectura S # arp en un nuevo proyecto comercial?
Gran respuesta, gracias. – calvinlough