首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用initWithFormat:arguments:?

何时使用initWithFormat:arguments:?
EN

Stack Overflow用户
提问于 2010-02-11 10:54:11
回答 3查看 4.1K关注 0票数 8

NSString方法initWithFormat:arguments:接受一个va_list作为参数。我不知道什么时候会使用它(甚至不知道如何使用它)。当常规的initWithFormat:更友好的时候,苹果为什么要添加这样的方法呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-11 11:02:40

不能将格式参数的动态列表传递给-initWithFormat:。例如,如果您想在不使用-initWithFormat:arguments:的情况下自己实现-stringByAppendingFormat:,那么您必须完成这项工作。使用va_list版本,您可以这样做:

代码语言:javascript
复制
- (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;
}
票数 11
EN

Stack Overflow用户

发布于 2010-02-11 11:02:08

当您自己的函数或方法使用可变参数时,它很有用,因为在这种情况下,不可能使用普通的initWithFormat:方法。

例如,以下(无用的)示例代码片段:

代码语言:javascript
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 2010-02-11 10:58:57

我想说的是,苹果在NSString initWithFormat:arguements:之上提供了NSString initWithFormat:作为一种实用方法,这意味着简短的版本最终只能调用较长的版本。

还有一个NSString stringWithFormat:它可以返回一个自动释放的NSString,如果你不需要很长时间使用这个字符串,可以省去alloc调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2241933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档