NSString方法initWithFormat:arguments:将va_list作为参数。我无法弄清楚何时使用它(甚至如何使用它)。当常规的initWithFormat:更加用户友好时,为什么Apple会添加这样的方法?
答案 0 :(得分:11)
您无法将格式参数的动态列表传递给-initWithFormat:
。例如,如果您想在没有-stringByAppendingFormat:
的情况下自己实施-initWithFormat:arguments:
,那么您就有了它的工作。使用va_list
版本,您可以执行此操作:
- (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;
}
答案 1 :(得分:3)
当您自己的函数或方法使用可变参数时,它很有用,因为在这种情况下,不可能使用vanilla initWithFormat:
方法。
例如,以下(无用的)示例代码段:
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);
}
答案 2 :(得分:0)
我想说的是,在没有进一步研究的情况下,Apple在NSString initWithFormat:
之上提供NSString initWithFormat:arguements:
作为实用方法,这意味着短版本最终会调用更长的版本。
还有[NSString stringWithFormat:]可以返回一个自动释放的NSString,如果你不需要长时间的字符串就可以保存alloc
调用。