iOS 块枚举与for循环

在编程中经常需要列举collection中得元素,在当前的Objective-C语言中又多重办法实现此功能,可以用C语言循环,也可以用Objective-C 1.0中得NSEnumerator以及Objective-C 2.0的快速便利(fast enumeration)。在引入了“block”之后,又多出来了集中的的遍历方式。下面详细说明。

for循环

NSArray *anArray = /*...*/;
    for (int i = 0; i < anArray.count; i++)
    {
        id object = anArray[i];
        //Do something with 'object'
    }

这么写还好,不过如果要便利字典或者set,就要复杂一点了:

    //Dictionary
    NSDictionary *aDictionary = /*...*/;
    NSArray *keys = [aDictionary allKeys];
    for (int i = 0; i < keys.count; i++)
    {
        id key = keys[i];
        id value = aDictionary[key];
        //Do something with 'key' and 'value'
    } 
    //Set
    NSSet *aSet = /*...*/;
    NSArray *objects = [aSet allObjects];
    for (int i = 0; i < objects.count; i++)
    {
        id object = objects[i];
        //Do something with 'object'
    }
字典与set都是无序的。所以无法根据特定的整数下表来直接访问其中的值。于是,就需要先获取字典里的所有键或是set里的所有对象,这两种情况下,都可以在获取到的有序数组上遍历,以便借此访问原字典及原set中得值。创建这个附加数组会有额外的开销,而且还会多创建一个数组对象,它会保留collection中得所有元素对象。当然了,释放数组时这些附加对象也要释放,可以要调用本来不需要执行的方法。其它各种便利方式都无需创建这种中介数组。
  for循环也可以实现反向遍历,计数器的值从“元素个数减1”,每次迭代时递减直到0为止。执行反向遍历时,使用for循环会比其它方式简单许多。
  用Objective-C 1.0中的 NSEnumerator 来遍历NSEnumerator 是个抽象基类,其中只定义了两个方法,供其具体子类来实现:

-(NSAraay *)allObjects;
- (id)nextObject;
其中关键的方法是nextObject,它返回枚举对象里的下个对象。每次调用该方法时,其内部的数据结构都会更新,使得下次调用方法时能返回下一个对象。等到枚举中得全部对象都已返回之后,再调用就将返回nil,这表示达到枚举末端了。
  Foundation框架中内建的collection类都实现了这种遍历方式。例如,想遍历数组,可以这样写代码:
NSArray *anArray = /* ... */;
    NSEnumerator *enumerator = [anArray objectEnumerator];
    id object;
    while ((object = [enumerator nextObject]) !
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值