前言

  1. @interface NSEnumerator<ObjectType> : NSObject <NSFastEnumeration>
  • Xcode 7 对系统中常用的一系列容器类型都增加了泛型支持(),有了泛型后就可以指定容器类中对象的类型了。假如向泛型容器中加入错误的对象,编译器会报警告。

    1. __covariant:协变性,子类型可以强转到父类型(里氏替换原则)。
    2. __contravariant:逆变性,父类型可以强转到子类型。
  • 不指定泛型类型的对象可以和任意泛型类型转化,但指定了泛型类型后,两个不同类型间是不可以强转的,假如你希望主动控制转化关系,就需要使用泛型的协变性和逆变性修饰符。

1、迭代器

  1. NSArray *arr = [NSArray arrayWithObjects:@"bei", @"jing", @"huan", @"ying", @"nin", nil];
  2. NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
  3. // 创建数组 正序 迭代器
  4. NSEnumerator *arrEnumer1 = [arr objectEnumerator];
  5. // 创建数组 反序 迭代器
  6. NSEnumerator *arrEnumer2 = [arr reverseObjectEnumerator];
  7. // 创建字典 key 迭代器
  8. NSEnumerator *dicKeyEnumer = [dic keyEnumerator];
  9. // 创建字典 对象 迭代器
  10. NSEnumerator *dicObjEnumer = [dic objectEnumerator];
  11. // 获取迭代器中下一个对象
  12. id obj = [arrEnumer1 nextObject];
  13. // 获取迭代器中所有对象
  14. NSArray *array = [arrEnumer2 allObjects];

2、数组用迭代器遍历

  1. NSArray *array = [NSArray arrayWithObjects:@"bei", @"jing", @"huan", @"ying", @"nin", nil];
  2. // 获取数组的正序迭代器
  3. NSEnumerator *enu1 = [array objectEnumerator];
  4. // 获取数组的反序迭代器
  5. NSEnumerator *enu2 = [array reverseObjectEnumerator];
  6. // 遍历数组
  7. id obj = nil;
  8. // 正序,获取下一个需要遍历的元素
  9. while (obj = [enu1 nextObject]) {
  10. NSLog(@"%@", obj);
  11. }
  12. // 反序,获取下一个需要遍历的元素
  13. while (obj = [enu2 nextObject]) {
  14. NSLog(@"%@", obj);
  15. }

3、集合用迭代器遍历

  1. NSSet *set = [NSSet setWithObjects:@5, @23, @3, @8, @21, @33, @18, nil];
  2. NSEnumerator *enu = [set objectEnumerator];
  3. id obj = nil;
  4. while (obj = [enu nextObject]) {
  5. NSLog(@"%@", obj);
  6. }

4、字典用迭代器遍历

  1. NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
  2. // key 迭代器
  3. NSEnumerator *keyEnumer = [dic keyEnumerator];
  4. id key = nil;
  5. while (key = [keyEnumer nextObject]) {
  6. NSLog(@"%@ = %@", key, [dic objectForKey:key]);
  7. }
  8. // 对象迭代器
  9. NSEnumerator *objEnumer = [dic objectEnumerator];
  10. id obj = nil;
  11. while (obj = [objEnumer nextObject]) {
  12. NSLog(@"%@", obj);
  13. }

iOS - OC NSEnumerator 迭代器的更多相关文章

  1. iOS - Swift NSEnumerator 迭代器

    前言 public class NSEnumerator : NSObject, NSFastEnumeration 1.迭代器 let arr:NSArray = ["bei", ...

  2. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  3. ios+oc面试题

    ios+oc面试题     浅复制和深复制的区别?//浅拷贝和深拷贝答案:浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身.//通过对象的指针来访问这个对象深层复制(mutableCo ...

  4. iOS OC语言原生开发的IM模块--RChat

    iOS OC语言原生开发的IM模块,用于项目中需要原生开发IM的情况,具备发送文字.表情.语音.图片.视频等完整功能,包含图片预览视频播放等功能,此项目将会长期更新如有问题可以提出,我的邮箱:fshm ...

  5. iOS - OC NSDictionary 字典

    前言 @interface NSDictionary<__covariant KeyType, __covariant ObjectType> : NSObject <NSCopyi ...

  6. iOS - OC NSArray 数组

    前言 @interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSe ...

  7. iOS - OC Foundation 框架

    前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...

  8. iOS设计模式之迭代器模式

    迭代器模式 基本理解 迭代器模式(Iterrator):提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露该元素的内部表示. 当你访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,你就应 ...

  9. iOS - OC RunTime 运行时

    1.运行时的使用 向分类中添加属性 // 包含运行时头文件 #import <objc/runtime.h> /* void objc_setAssociatedObject(id obj ...

随机推荐

  1. 坑爹的VS2012

    2.2.2.如果卸载 Visual Studio 2010 Service Pack 1,则必须先重新安装 Visual Studio 2010,然后才能再次安装 SP1 如果卸载 Visual St ...

  2. View Properties [AX 2012]

    View Properties [AX 2012] Other Versions This topic has not yet been rated - Rate this topic Updated ...

  3. php中method_exists()和is_callable()如何进行语句判断

    method_exists()和is_callable()方法进行判断.那么两则区别是什么呢? 已知类文件如下: class Student{private $alias=null;private $ ...

  4. Windows驱动开发(中间层)

    Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385 ...

  5. Symfony电子商务

    http://zhilihe.com/content/symfony%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1%E9%A1%B9%E7%9B%AE%E6%80%BB%E7 ...

  6. HDU 1715 大菲波数

    大菲波数 问题描述 : Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2)  n>=3. 计算第n项Fibonacci数值. 输入: 输入第一行为一 ...

  7. 编译ITK

    [2016年7月4周]编译ITK 1.下载必备文件 InsightToolkit-4.8.1.cmake 2.cmake编译 修改CMAKE_INSTALL_PREFIX配置到需要生成的目录下面去. ...

  8. 本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的

    本地计算机上的MSSQLSERVER服务启动后又停止了.一些服务自动停止,如果它们没有什么可做的 笔者ASP运行环境:操作系统为Windows XP SP2,IIS的版本为默认的5.1,数据库为SQL ...

  9. laravel框架总结(一) -- 请求和响应

    一.laravel请求 1.获取请求 1>获取请求的 URI path 方法会返回请求的 URI.所以,如果接收到的请求目标是 http://domain.com/foo/bar,那么 path ...

  10. ios事件传递

    http://blog.csdn.net/iefreer/article/details/4754482 本章描述了iPhone操作系统里的事件类型,并解释了如何处理它们.还讨论了怎么在一个应用程序里 ...