假设我有签名的方法:什么是正确的方式来包装[NSString stringWithFormat:]?
+ (NSString *) myFormattedString:(NSString *)format, ...;
而且我希望它前面加上我的选择(例如@“富”)的字符串。我想最好的方法是使用[myString initWithFormat:arguments:],但是你将如何实现这个方法?
我试着做以下,但我得到的警告,在注释规定:
+ (NSString *) myFormattedString:(NSString *)format, ... {
char *buffer;
[format getCString:buffer maxLength:[format length] encoding:NSASCIIStringEncoding];
va_list args;
va_start(args, buffer); // WARNING: second parameter of 'va_start' not last named argument
NSString *str = [[NSString alloc] initWithFormat:format arguments:args];
[str autorelease];
return [NSString stringWithFormat:@"Foo: %@.", str];
}
我假设的va_start(原因)可以在一个(字符*)是因为我在
manual page of STDARG(3)上看到的例子。如果我完全错了,随意彻底重写该方法。
Woops,我误解了va_start()的工作原理。我想http://numbergrinder.com/node/35没有足够清楚地解释它。我认为va_start()的第二个参数是有多少个参数发送给函数的实际计数;并且它有一个'重载',它接受了一个格式字符串,该格式字符串根据格式字符串中有多少未转义的%确定了计数。哇,这使得它更容易,您不必确定你自己数。感谢您的解释。 – Senseful 2009-07-30 22:04:23