IOS第十一天——Obj-C中的快速枚举

最近白天在公司的时候一堆事儿,搞的很头大,只有晚上回家有时间看书学习了,所以趁着有空就多学点儿,那么接下来就学习下Obj-C中的快速枚举,快速枚举是Obj-C的一个特性,可以让开发人员很容易地枚举容器里的内容,并且非常安全和有效率。

Obj-C中的快速枚举采用for语句进行枚举,其语法定义如下:

for ( Type newVariable in expression ) { statements }

or

Type existingItem;

for ( existingItem in expression ) { statements }

在处理对象时两个表达式都遵守NSFastEnumeration协议,在循环中迭代变量指向容器里的每一个对象,随后针对此对象执行后面的statements,当采集器被遍历完毕,循环结束,迭代变量指向nil;如果循环提前终止,迭代变量则指向容器当前对象。快速枚举有以下几个优势:

  • 快速枚举可以直接使用NSEnumerator,使得枚举非常高效
  • 快速枚举语法简洁
  • 快速枚举安全,枚举器自带安全机制,如果在枚举过程中试图修改采集器会抛出异常

任何类的实例在访问其他对象采集器内容的时候都可以使用快速枚举。

还是老规矩,我们看一个书上的示例代码来了解下Obj-C中的快速枚举:

//Obj-C中的快速枚举
NSArray *array=[[NSArray arrayWithObjects:@"One",@"Two",@"Three",@"Four",nil]];//创建array对象并初始化赋值
for(NSString *element in array)
{
    NSLog(@"element: %@",element);//遍历输出array中的每一个对象
}

NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"quattour", @"four", @"quinque", @"five", @"sex", @"six",nil];//创建dictionary对象并且初始化赋值

NSString *key;
for(key in dictionary)
{
    NSLog(@"English :%@, Latin: %@",key,[dictionary objectForKey:key]);//遍历输出dictionary中的每一个对象
}
除此之外还可以用NSEnumerator对象来进行快速枚举,我们还是来看一下示例代码:

NSArray *array=[[NSArray arrayWithObjects:@"One",@"Two",@"Three",@"Four",nil]];//创建array对象并初始化赋值
NSEnumerator *enumerator=[array reverseObjectEnumerator];//得到一个array的枚举对象
for(NSString *element=[enumerator nextObject])//遍历每个array对象
{
    if([element isEqualToString:@"Three"])
    {
        break;
    }
}

因为枚举器和容器里的对象都是排列有序的,因此我们可以在快速枚举的时候采用计数值来进行需要的操作。

int i;

for (i=0; i<[array count];++i)

{

NSLog(@"Element at index %u is: %@", i, [array objectAtIndex:i]);

}
同时呢,因为快速枚举采用的是标准的for循环,我们还可以用break来中断枚举操作,或者跳过其中某个枚举对象,当然,也可以用条件语句来完成。

NSArray *array=/*赋值*/;

NSInteger index=0;

for (id element in array)

{

if (index !=0)

{

break;

}

}

OK,今天就先学到这里,每天一个简单的知识点,每天进步一点点。

2013年04月23日,Eric.Tang 记



你可能感兴趣的:(ios,obj-c,快速枚举)