本文介绍: 分类的作用是扩展已有类的功能类别是OC特有的属性可以在不改变类名和原类的实现的前提下,进行累的扩展。为原有的类增加方法方法内部可以访问原有类的成员变量,但这些成员变量一定要定义头文件中。继承是指一个新类拥有被继承类(父类)的全部属性方法。优点:代码重用,父类在不知道具体实现的情况下,就可以构建业务流程。缺点:父类的改变影响所有子类子类父类的耦合性较高。

分类基础知识


分类

定义

分类的作用是扩展已有类的功能
类别是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. 可以多层继承

新建一个分类

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

原文地址:https://blog.csdn.net/weixin_61196797/article/details/130394335

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11697.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注