Objective C: (id)stringWithFormat:(NSString *)format, ... ) 是如何实现的?
来源:互联网 发布:女生双肩包 知乎 编辑:程序博客网 时间:2024/05/22 14:18
原来使用可变变量,简单的实现原理如下代码所示:
实现一: 首个参数为所跟参数的个数,用于限定可变变量列表的大小。
- (NSNumber *) addValues:(int) count, ... { va_list args; va_start(args, count); NSNumber *value; double retval; for( int i = 0; i < count; i++ ) {value = va_arg(args, NSNumber *); retval += [value doubleValue]; } va_end(args); return [NSNumber numberWithDouble:retval];}
实现二:使用 nil 作为参数结束的标志。 如同nsarray *array = [nsarray arraywithobjects: obj1,obj2,nil];
- (NSNumber *) addValues: ... { va_list args; va_start(args, count); NSNumber *value; double retval; while( value = va_arg(args, NSNumber *);) {retval += [value doubleValue]; } va_end(args); return [NSNumber numberWithDouble:retval];}
实现三:使用特殊字符作为参数个数标记。 如 % 在[nsstring stringwithformat:@“%@, %d,%f,”obj1,5, 6.5];
详细信息可参考如下文章:
http://www.numbergrinder.com/2008/12/variable-arguments-varargs-in-objective-c/feed/
- Objective C: (id)stringWithFormat:(NSString *)format, ... ) 是如何实现的?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应当用initWithFormat? 还是 stringWithFormat?
- Objective-C NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- NSString中stringWithFormat的用法
- objective-c中是如何实现线程同步的?
- Objective c ,iOS KVC是如何实现的,权威答案
- objective-c中是如何实现线程同步的?
- NSString函数stringWithFormat与stringWithString的比较
- NSString使用stringWithFormat拼接的相关知识
- NSString使用stringWithFormat拼接的冷知识
- Objective-C 中,id 类型是一个独特的数据类型
- Objective-C 是如何慢慢走红的?
- opensuse如何取消自动登录
- 全排列以及相关算法
- _objc_setProperty_nonatomic和_objc_setProperty_atomic运行时没有找到的问题
- java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
- 各种数据库分页sql
- Objective C: (id)stringWithFormat:(NSString *)format, ... ) 是如何实现的?
- Win7:如何共享有线网络实现手机上网
- Chrome调试javascript
- 设计模式和原则:原则篇(一)
- ORACLE SEQUENCE用法
- ODAC安装配置与使用详解
- jQuery 之路重走(7) jQuery中ajax的应用
- NSBundle对象使用详解
- Linux下Mysql操作