enumerateObjectsUsingBlock,for in,for的区别和性能测试

一、

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值