NSString方法initWithFormat:arguments:接受一个va_list作为参数。我不知道什么时候会使用它(甚至不知道如何使用它)。当常规的initWithFormat:更友好的时候,苹果为什么要添加这样的方法呢?
发布于 2010-02-11 11:02:40
不能将格式参数的动态列表传递给-initWithFormat:。例如,如果您想在不使用-initWithFormat:arguments:的情况下自己实现-stringByAppendingFormat:,那么您必须完成这项工作。使用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;
}发布于 2010-02-11 11:02:08
当您自己的函数或方法使用可变参数时,它很有用,因为在这种情况下,不可能使用普通的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);
}发布于 2010-02-11 10:58:57
我想说的是,苹果在NSString initWithFormat:arguements:之上提供了NSString initWithFormat:作为一种实用方法,这意味着简短的版本最终只能调用较长的版本。
还有一个NSString stringWithFormat:它可以返回一个自动释放的NSString,如果你不需要很长时间使用这个字符串,可以省去alloc调用。
https://stackoverflow.com/questions/2241933
复制相似问题