iOS之《Effective Objective-C 2.0》读书笔记(48)

本文介绍了Objective-C中数组、字典和集合的多种遍历方法,并重点推荐使用块枚举来提高遍历效率和代码可读性。块枚举不仅支持数组、字典和集合的遍历,还提供了便利的反向遍历方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第48条:多用块枚举,少用for循环

1.基本的for循环
    NSArray *array = /*...*/;
    for (int i = 0; i < anArray.count; i++)
    {
        id object = anArray[i];
        //Do something with 'object'
    }
2.NSEnumerator遍历法
  • 正向遍历
    NSArray *anArray = /* ... */;
    NSEnumerator *enumerator = [anArray objectEnumerator];
    id object;
    while ((object = [enumerator nextObject]) != nil)
    {
        // Do something with 'object'
    }
  • 反向遍历
    NSArray *anArray = /* ... */;
    NSEnumerator *enumerator = [anArray reverseObjectEnumerator];
    id object;
    while ((object = [enumerator nextObject]) != nil)
    {
        // Do something with 'object'
    }
3.快速遍历
    NSArray *anArray = /* ... */;
    for (id object in anArray)
    {
        // Do something with 'object'
    }
4.块枚举法
  • 这个块有三个参数,分别是当前迭代所针对的对象、所针对的下标,以及指向布尔值的指针。前两个参数的含义不言而喻。而通过第三个参数所提供的机制,开发者可以终止遍历操作
//1>NSArray
    NSArray *anArray = /* ... */;
    [anArray enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop)
     {
         // Do something with 'object'
         if (shouldStop)
         {
             *stop = YES;
         }
     }];

//2>Dictionary
    NSDictionary *aDictionary = /* ... */;
    [aDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop)
     {
         // Do something with 'key' and 'object'
         if (shouldStop)
         {
             *stop = YES;
         }
      }];
//3>Set
    NSSet *aSet = /* ... */;
    [aSet enumerateObjectsUsingBlock:^(id object, BOOL *stop)
     {
         // Do something with 'object'
         if (shouldStop)
         {
             *stop = YES;
         }
     }];
  •  用此方式也可以执行反向遍历
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)options
                         usingBlock:(void(^)(id obj, NSUInteger idx, BOOL *stop))block;

- (void)enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions)options
                                usingBlock: (void(^)(id key, id obj, BOOL *stop))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值