当前位置: 首页 > article >正文

分类和扩展与继承

文章目录

    • @[TOC](文章目录)
  • 分类
    • 定义
    • 分类的使用
      • 使用场景
      • 使用注意点
  • Extension 扩展
    • 分类和扩展的区别
  • 继承的定义
    • 使用
    • 注意点
  • 新建一个分类

分类基础知识


分类

  • 分类是指为已有的类添加方法,也可以说是将很多很复杂的代码划分为几个分区。

定义

分类的作用是扩展已有类的功能
类别是OC特有的属性,可以在不改变类名和原类的实现的前提下,进行累的扩展。

为原有的类增加方法
在方法内部可以访问原有类的成员变量,但这些成员变量一定要定义在头文件中。

分类的使用

  1. 为原有的类创建一个分类
  2. 在分类中新增方法的实现和声明

使用场景

  1. 针对系统的一些类进行扩展,如NSSting,NSArray,NSNumber等类,系统本身不提倡使用继承去扩展方法,因为这些类内部的实现对继承有所限制,所以最好使用分类的方式进行扩展。
  2. 类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,针对大型复杂的类,可以提高维护和可读性,便于管理。

使用注意点

  1. 可以在分类中添加成员变量和方法,但是添加的成员变量不会自动生成setter和getter方法,需要在实现部分实现
    OC是动态语言,方法真正的实现都是通过runtime实现的,虽然系统不会给生成setter/getter,但是我们可以通过runtime手动添加setter/getter

  2. 不能在分类中定义与原类相同名方法,不同分类中也不能定义同名方法,如果在分类中增加了与原类同名方法,那么分类中的方法会覆盖原有类的方法,如果多个分类中有相同方法,执行最后编译的方法。

  3. 分类需要#import

Extension 扩展

Extension是Category的一个特例,又被称为“匿名分类”
分类的使用:
扩展为一个类添加额外的原来没有的变量,属性,方法。
一般类扩展写在.m文件中
一般私有的属性写在.m文件中的扩展中

分类和扩展的区别

  1. 类别在原则上只能增加方法
  2. 类扩展不仅可以增加方法,还可以增加实例变量(或者属性),只是该实例默认是@private类型的(使用范围只在自身类,而非子类或者其地方)
  3. 类扩展中声明的方法没有被实现,编译器警告,但是类别中方法没有被实现编译器不会有任何提示。因为类扩展是在编译阶段被添加到类中,而类别是在运行中被添加到类中的
  4. 类扩展不能像类别那样拥有独立的实现部分(implementation),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。
  5. 定义在.m文件中的类扩展方法是私有的,定义在.h中的类扩展方法是公有的

继承的定义

继承是指一个新类拥有被继承类(父类)的全部属性和方法。
优点:代码重用,父类在不知道具体实现的情况下,就可以构建业务流程。
缺点:父类的改变影响所有子类,子类和父类的耦合性较高。

使用

  1. 当子类中需要自己独特的行为,而不想使用父类的方法,可以把父类的方法覆盖掉,直接在子类中用同样的名字重写这个方法(重载over right)。
  2. 如果重写了父类的方法,但是还想在使用父类的功能,则使用super调用父类的方法。
  3. 在继承体系中,方法的调用顺序是:在自己的类中找,去父类找,去父类的父类中找,一直找到基类。
  4. OC中只有实现没有声明的方法,是私有方法,不能在外边直接访问,但它绝对不是私有

注意点

  1. OC中,类方法也可以是继承的(可以通过子类的类名调用父类的类方法),类方法也是可以重写的
  2. 类方法可以和对象方法重名(+表示类方法,-表示对象方法)。
  3. 子类中不能定义与父类同名的成员变量
  4. 一个类只能继承一个直接父类
  5. 可以多层继承

新建一个分类

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/15180.html

相关文章:

  • 【gitlab】gitlabrunner部署
  • go语言中反射机制(3种使用场景)
  • 基于差分、粒子群算法下的TSP优化对比
  • 【学习笔记】科学计算
  • 【网络】什么是交换机?switch
  • Centos 7 安装wget
  • Python基于Pytorch Transformer实现对iris鸢尾花的分类预测,分别使用CPU和GPU训练
  • 无HMI和PLC设备时,模拟程序收发是否正常
  • MobileNetV3详细原理(含torch源码)
  • Hytrix原理
  • ​工程师如何对待开源
  • 【keil5开发ARM工程时使用STLink调试的技巧分享】
  • 数据结构之KMP算法:彻底搞懂kmp算法
  • Ajax XHR请求
  • c++元编程
  • Maven 如何下载依赖包的源码包
  • 2023年第二十届五一数学建模竞赛题目 C题详细思路
  • [最小距离的最大值] 跳石头
  • node(express框架)连接mysql 基础篇
  • 数据结构——求二叉树的属性
  • 制造策略 ETO、MTO、ATO、MTS
  • 09 【Sass语法介绍-函数指令】
  • 原理这就是索引下推呀
  • ChatGPT能让智能客服更上一层楼么?
  • Mac 地址与 IP 地址有什么区别?
  • RocketMQ第二节(安装和模块详解)