分类和扩展与继承

news/2024/7/20 22:19:16 标签: ios, xcode, objective-c

文章目录

    • @[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.niftyadmin.cn/n/274616.html

相关文章

symfonos 2

目录 扫描 SMB SSH 提权 扫描 由于端口80是打开的,我们试图在浏览器中打开IP地址,但在网页上没有找到任何有用的信息。我们还尝试了dirb和其他目录暴力工具,但没有找到任何东西。 SMB 为了进一步枚举,我们使用Enum4Linux工具并找到了一些有用的信息。我们发现了一个名…

Spark UI 相关说明

Spark UI Spark UI设计思路: 1.简洁明了:Spark UI应该是一个简洁明了的界面,避免过多的信息和操作,让用户能够快速地找到自己想要的信息。 2.可定制:Spark UI应该允许用户根据自己的需求进行定制,比如添…

mac免费杀毒软件哪个好用?如何清理mac系统需要垃圾

CleanMyMac x是一款功能强大的Mac系统优化清理工具,使用旨在帮助用户更加方便的清理您系统中的所有垃圾,从而加快电脑运行速度,保持最佳性能,更加稳定、流畅、快速!!! CleanMyMac X无疑是目前m…

zip文件解压详解

文章目录 1.起因2.详解3.实践4.参考 1.起因 自己之前在linux系统解压zip文件,一直用 unzip *.zip我们期望解压后的文件都是统一放到以*命名的文件夹下,但是自己有一次解压后发现所有的文件并没有放到上述文件夹下,而是放到了该压缩包同目录…

「欧拉定理」[SDOI2008]仪仗队

[SDOI2008]仪仗队 https://ac.nowcoder.com/acm/problem/20313 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练。 仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所…

鸿蒙混合打包。在现有安卓应用的基础上扩展鸿蒙的特性,以最快的速度布局鸿蒙生态!

鸿蒙混合打包 介绍 鸿蒙混合打包。在现有安卓应用的基础上扩展鸿蒙的特性,以最快的速度布局鸿蒙生态! 参考:京东APP鸿蒙版上架实践。本项目只是这篇文章的一个验证,让更多的兄弟们可以少走弯路。 我尽可能把每一步的改动作为一…

二本做程序员有出路吗

关于本科同学想从事软件行业 想做程序员 我总结了大家一些比较常见的问题 程序员不考研只有本科学历够吗 如果你担心自己本科学历不考研 在IT行业找不到工作的话 那你就太让很多在职的程序员旱严了 目前百分之五六十的在职程序员 都是专科学历 而且呢大部分都不是计算机专业的 …

Python每日一练(20230429)

目录 1. 地下城游戏 🌟🌟🌟 2. 杨辉三角 II 🌟 3. 旋转数组 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…