iOS | 多态的实际运用

作者: 无夜之星辰 | 来源:发表于2018-12-17 23:14 被阅读57次

一句话概括多态:子类重写父类的方法,父类指针指向子类

或许你对多态的概念比较模糊,但是很可能你已经在不经意间运用了多态。比如说:

有一个tableView,它有多种cell,cell的UI差异较大,但是它们的model类型又都是一样的。

由于这几种cell都具有相同类型的model,那么你肯定会先建一个基类cell,如:

@interface BaseCell : UITableViewCell

@property (nonatomic, strong) Model *model;

@end

然后各种cell继承自这个基类cell:

红绿蓝三种子类cell
@interface RedCell : BaseCell

@end

子类cell重写BaseCell的setModel:方法:

// 重写父类的setModel:方法
- (void)setModel:(Model *)model {
    // 调用父类的setModel:方法
    super.model = model;
    
    // do something...
}

在controller中:

// cell复用ID array
- (NSArray *)cellReuseIdArray {
    if (!_cellReuseIdArray) {
        _cellReuseIdArray = @[RedCellReuseID, GreenCellReuseID, BlueCellReuseID];
    }
    return _cellReuseIdArray;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellResueID = nil;
    cellResueID = self.cellReuseIdArray[indexPath.section];
    // 父类
    BaseCell *cell = [tableView dequeueReusableCellWithIdentifier:cellResueID];
    // 创建不同的子类
    if (!cell) {
        switch (indexPath.section) {
            case 0: // 红
            {
                // 父类指针指向子类
                cell = [[RedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID];
            }
                break;
                
            case 1: // 绿
            {
                // 父类指针指向子类
                cell = [[GreenCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID];
            }
                break;
                
            case 2: // 蓝
            {
                // 父类指针指向子类
                cell = [[BlueCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID];
            }
                break;
        }
    }
    // 这里会调用各个子类的setModel:方法
    cell.model = self.dataArray[indexPath.row];
    return cell;
}

不出意外,类似于上面的代码我们都写过,其实这里就运用到了类的多态性。

多态的三个条件:

  • 继承:各种cell继承自BaseCell
  • 重写:子类cell重写BaseCell的setModel:方法
  • 指向:父类cell指针指向子类cell

以上,就是多态在实际开发中的体现。

合理运用类的多态性可以降低代码的耦合度让代码更易扩展。

把这些概念性的东西跟日常实际开发相结合,你就能秒懂且难忘。

相关文章

  • iOS | 多态的实际运用

    一句话概括多态:子类重写父类的方法,父类指针指向子类。 或许你对多态的概念比较模糊,但是很可能你已经在不经意间运用...

  • 多态

    iOS | 多态的实际运用 一句话概括多态:子类重写父类的方法,父类指针指向子类。 或许你对多态的概念比较模糊,但...

  • iOS | mutableCopy的实际运用

    这是一篇发现问题和解决问题的笔记。 遇到的问题 每次上拉加载更多完成执行[self.tableView reloa...

  • iOS GCD实际项目运用

    GCD的解释及原理网上已经有详细的介绍了,这里我就只是把自己项目中常用到的记录下来,如果大家有更多的项目运用,请留...

  • iOS反射机制实际运用

    系统Foundation框架为我们提供了一些方法反射的API,我们可以通过这些API执行将字符串转为SEL等操作。...

  • iOS | “类族”的实际运用

    1. 场景还原 如图,三种cell的tableView: 后台返回的json数据如下: 类似于这种同种model,...

  • 设计模式-建造者模式

    设计模式 设计模式的本质是面向对象设计原则的实际运用,是对类的==封装性==、==继承性==和==多态性==以及类...

  • 什么是多态:

    什么是多态: 实际上是不同对象作用与同一操作产生不同的效果。多态的思想实际上是把“想做什么”和“谁去做“分开,多态...

  • 再谈多态的意义和操作过程

    多态的意义 在面向对象编程(OOP),多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之...

  • iOS:RunTime基本使用与实际运用

    一、RunTime是什么? 定义:RunTime实际上是一个库,这个库使我们可以在程序运行时动态的创建对象、检查对...

网友评论

    本文标题:iOS | 多态的实际运用

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