zoukankan      html  css  js  c++  java
  • Objective-C Fast Enumeration

    Fast enumeration is an Objective-C's feature that helps in enumerating through a collection. So in order to know about fast enumeration, we need know about collection first which will be explained in the following section.

    Collections in Objective-C

    Collections are fundamental constructs. It is used to hold and manage other objects. The whole purpose of a collection is that it provides a common way to store and retrieve objects efficiently.

    There are several different types of collections. While they all fulfil the same purpose of being able to hold other objects, they differ mostly in the way objects are retrieved. The most common collections used in Objective-C are:

    • NSSet
    • NSArray
    • NSDictionary
    • NSMutableSet
    • NSMutableArray
    • NSMutableDictionary

    If you want to know more about these structures, please refer data storage in Foundation Framework.

    Fast enumeration Syntax 

    for (classType variable in collectionObject ) {
    statem ents
    }

    Here is an example for fast enumeration. 

    #import <Foundation/Foundation.h>
    int main() {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
        NSArray *array = [[NSArray alloc] initWithObjects:@"string1", @"string2",@"string3",nil]; 
        for(NSString *aString in array)
        {
            NSLog(@"Value: %@",aString);
        }
        [pool drain]; 
        return 0;
    }

    Now when we compile and run the program, we will get the following result. 

    2013-09-28 06:26:22.835 demo[7426] Value: string1
    2013-09-28 06:26:22.836 demo[7426] Value: string2
    2013-09-28 06:26:22.836 demo[7426] Value: string3

    As you can see in the output, each of the objects in the array is printed in an order.

    Fast Enumeration Backwards

    for (classType variable in [collectionObject reverseObjectEnumerator] )
    { 
        statements 
    }

    Here is an example for reverseObjectEnumerator in fast enumeration.

    #import <Foundation/Foundation.h>
    
    int main()
    {
       NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
       NSArray *array = [[NSArray alloc]
       initWithObjects:@"string1", @"string2",@"string3",nil];
       for(NSString *aString in [array reverseObjectEnumerator])
       {
          NSLog(@"Value: %@",aString);
       }
       [pool drain];
       return 0;
    }

    Now when we compile and run the program, we will get the following result.

    2013-09-28 06:27:51.025 demo[12742] Value: string3
    2013-09-28 06:27:51.025 demo[12742] Value: string2
    2013-09-28 06:27:51.025 demo[12742] Value: string1

    As you can see in the output, each of the objects in the array is printed but in the reverse order as compared to normal fast enumeration.

  • 相关阅读:
    条款33:避免遮掩继承而来的名称
    LeetCode OJ:Combinations (排列组合)
    LeetCode OJ:Delete Node in a Linked List(链表节点删除)
    LeetCode OJ:Contains Duplicate III(是否包含重复)
    LeetCode OJ:Contains DuplicateII(是否包含重复II)
    luogu 1004 方格取数
    平衡树之伸展树(Splay Tree)题目整理
    P2472 [SCOI2007]蜥蜴(网络最大流)
    P1349 广义斐波那契数列(矩阵加速)
    P4113 [HEOI2012]采花 (莫队TLE)
  • 原文地址:https://www.cnblogs.com/xujinzhong/p/8434754.html
Copyright © 2011-2022 走看看