美文网首页
iOS设计模式--迭代器

iOS设计模式--迭代器

作者: live111 | 来源:发表于2016-08-27 20:14 被阅读0次

    学习迭代器之前,先看一种数据结构--线性表

    线性表:线性表是最基本,最简单,也是最常用的一种数据结构。

    线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用于大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了哨位结点)。

    我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所有双链表和循环链表依旧是线性表。

    在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受线性表主要包括栈和队列,受限表示对结点的操作受限制。

    线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

    如下图为栈和队列结构图:

    用代码实现一个链表:

    首先创建一个结点类《Node》:

    Node.h:

    Node.m:


    然后创建一个链表类《LinkedList》:

    LinkedList.h:

    LinkedList.m:

    迭代器模式:

    迭代器(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

    首先看一个系统的迭代器模式,遍历一个集合中的所有元素:

    //系统的迭代器

    //创建集合对象

    NSArray *datas = @[@"A", @"B", @"C", @"D"];

    //从集合对象创建迭代器

    NSEnumerator *iterator = [datas objectEnumerator];

    //从集合对象中访问元素

    id arrayObj = nil;

    while (arrayObj = [iterator nextObject]) {

    NSLog(@"arrayObj:%@", arrayObj);

    }

    打印结果:A,B,C,D

    实现自定义的迭代器:

    1,创建结点类和链表类

    《Node》,《LinkedList》

    Node.h:

    Node.m:

    LinkedList.h:

    LinkedList.m:

    2.创建一个迭代器协议类《IteratorProtocol》


    3.创建迭代器《LinkedListIterator》:

    LinkedListIterator.h:

    LinkedListIterator.m:

    4.实现:


    相关文章

      网友评论

          本文标题:iOS设计模式--迭代器

          本文链接:https://www.haomeiwen.com/subject/ygpdsttx.html