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

来源:互联网 发布:linux修改ip配置文件 编辑:程序博客网 时间:2024/05/18 07:15

第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))
阅读全文
0 0