enumerateObjectsUsingBlock,for in,for的区别和性能测试
2016-06-23 16:33
633 查看
一、
1.for in 比for高效.
2.enumerateObjectsUsingBlock和for in 效率差不多,enumerateObjectsUsingBlock有时候会比for in 快.
3.enumerateObjectsUsingBlock要修改局部变量的时候,局部变量要声明成__block类型.
4.CFAbsoluteTimeGetCurrent 获取当前时间,多用于函数的性能测试.
二、
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void
(^)(ObjectType obj, NSUInteger idx,BOOL *stop))block
其中opts包含两种类型:
NSEnumerationConcurrent = (1UL <<0),//并发,顺序不确定
NSEnumerationReverse = (1UL <<1),//倒叙,顺序确定
NSArray版
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj,NSUInteger
idx, BOOL *stop))block
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void
(^)(ObjectType obj, NSUInteger idx,BOOL *stop))block
- (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts
usingBlock:(void (^)(ObjectType obj,NSUInteger idx,BOOL *stop))block
NSDictionary版
- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(KeyType key, ObjectType obj,BOOL
*stop))block
- (void)enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void
(^)(KeyType key, ObjectType obj, BOOL *stop))block
字典版的可以同时取key和value(forin只能取key再手动取value),如:
NSDictionary *dict =@{@"one":@"Lily",@"tow":@"LiLei",@"three":@"Lucy"};
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key,id _Nonnull
obj,BOOL *_Nonnull stop) {
NSLog(@"key%@,value%@",key,obj);
}];
References:
http://www.cocoachina.com/industry/20140531/8630.html http://www.cnblogs.com/skyming/p/3977075.html
1.for in 比for高效.
2.enumerateObjectsUsingBlock和for in 效率差不多,enumerateObjectsUsingBlock有时候会比for in 快.
3.enumerateObjectsUsingBlock要修改局部变量的时候,局部变量要声明成__block类型.
4.CFAbsoluteTimeGetCurrent 获取当前时间,多用于函数的性能测试.
二、
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void
(^)(ObjectType obj, NSUInteger idx,BOOL *stop))block
其中opts包含两种类型:
NSEnumerationConcurrent = (1UL <<0),//并发,顺序不确定
NSEnumerationReverse = (1UL <<1),//倒叙,顺序确定
NSArray版
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj,NSUInteger
idx, BOOL *stop))block
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void
(^)(ObjectType obj, NSUInteger idx,BOOL *stop))block
- (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts
usingBlock:(void (^)(ObjectType obj,NSUInteger idx,BOOL *stop))block
NSDictionary版
- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(KeyType key, ObjectType obj,BOOL
*stop))block
- (void)enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void
(^)(KeyType key, ObjectType obj, BOOL *stop))block
字典版的可以同时取key和value(forin只能取key再手动取value),如:
NSDictionary *dict =@{@"one":@"Lily",@"tow":@"LiLei",@"three":@"Lucy"};
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key,id _Nonnull
obj,BOOL *_Nonnull stop) {
NSLog(@"key%@,value%@",key,obj);
}];
References:
http://www.cocoachina.com/industry/20140531/8630.html http://www.cnblogs.com/skyming/p/3977075.html
相关文章推荐
- Effective Objective-C 2.0 第13条:理解“类对象”的用意
- 将前台的String转给后台,解析为list<Object>
- Effective Objective-C 2.0 第13条:用“方法调配技术”调试“黑盒方法”
- An unexpected version directory `Objective-C` was encountered for the'<xxx>'Pod in the `xxx`
- JS将form参数直接序列化成jsonObject
- 99.从 NSObject 初始化了解 isa指针
- Java基础:Object
- org.hibernate.NonUniqueObjectException两种解决方法
- 1.LazyForCollection Object,hbm
- 1.LazyForClass Object,hbm
- 1.集合映射:Object,hbm
- category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性
- IOS基础:深入理解Objective-c中@class的含义
- json 字符串包含数组转换为object对象是报异常java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
- ES6-Object
- Java学习笔记(10)Object-Oriented Thinking
- Java学习笔记(9)Objects and Classes
- [Effective JavaScript 笔记]第43条:使用Object的直接实例构造轻量级的字典
- 高仿微博
- java object to map