分类和扩展与继承

news2025/1/16 11:14:19

文章目录

    • @[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.coloradmin.cn/o/474298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十四届蓝桥杯大赛软件赛省赛 Java 大学 B 组题解

试题 A: 阶乘求和 本题总分:5 分 【问题描述】 令 S 1! 2! 3! ... 202320232023!,求 S 的末尾 9 位数字。 提示:答案首位不为 0。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数&am…

Linux信号:SIGCHLD信号和僵尸进程

1. SIGCHLD信号产生条件: (1)子进程终止; (2)子进程收到SIGSTOP暂停; (3)子进程处于暂停状态,收到SIGCONT被唤醒。 2. 捕捉SIGCHLD,避免僵尸进程&…

网络钓鱼:工作场所保护电子邮件安全的五个步骤

导语:Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧,以优化工作场所的电子邮件安全性。 Sophos电子邮件产品管理高级总监David Mitchell分享了他的主要技巧,以优化工作场所的电子邮件安全性。 尽管工作场所的聊天和即时…

云原生时代崛起的编程语言Go基础实战

文章目录 概述定义使用场景Go 安全 使用须知搜索工具Go基础命令标准库 基础语法Effective Go 概览命名规范注释变量常量(const)控制结构数据类型迭代(range)函数指针字符串和符文结构体(struct)方法接口(interface)泛型错误(errors&#xff0…

iOS描述文件(.mobileprovision)一键申请

转载:IOS描述文件制作教程 iOS描述文件(.mobileprovision)一键申请 在主界面上点击描述文件按钮。 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 新建ios描述文件 然后点击新建,然后输入描述文件名称&…

数据库设计与前端框架

数据库设计与前端框架 学习目标: 理解多租户的数据库设计方案 熟练使用PowerDesigner构建数据库模型理解前端工程的基本架构和执行流程 完成前端工程企业模块开发 多租户SaaS平台的数据库方案 多租户是什么 多租户技术(Multi-TenancyTechnology&a…

【密码算法 之六】CCM 浅析

CCM模式浅析 1. 综述2. 加密2.1 前置条件(Prerequisites)2.2 输入(Input)2.3 输出(Output)2.4 加密流程(Steps) 3. 解密3.1 前置条件(Prerequisites)3.2 输入…

Orangepi Zero2 全志H616简介

为什么学 学习目标依然是Linux 系统 ,平台是 ARM 架构 蜂巢快递柜,配送机器人,这些应用场景用C51,STM32单片机无法实现 第三方介入库的局限性,比如刷脸支付和公交车收费设备需要集成支付宝SDK,提供的libalipay.so 是…

【VM服务管家】VM4.0平台SDK_2.2 模块API类

目录 2.2.1 方案保存:方案高速保存的方法2.2.2 Group模块:Group输入输出图像数据的方法2.2.3 模块操作类:设置输入图像、参数和ROI的方法2.2.4 图像源:通过图像源模块接口设置图像输入的方法2.2.5 图像源:通过SDK传入相…

go 语言环境安装(Windows 系统下安装)

go 语言官网:The Go Programming Language 下载 go 安装包的网址:All releases - The Go Programming Language go 支持很多种操作系统 Windows 系统下 - 安装和配置SDK 一、SDK 介绍 SDK 的全称是 Software Development Kit ,即 软件开发工具包 二…

STM32物联网实战开发(1)——全新的程序框架

现在STM32公司主推的是HAL库的开发,标准库已经不再更新。通过STM32cubeMX的图形界面生成代码非常的方便。 一、程序框架的构想 1、STM32cubeMX 生成的代码与添加的应用代码分离; 2、利用 STM32cubeMX 重新生成代码,不影响应用代码&#xf…

zabbix配置钉钉告警(附含钉钉告警脚本 · 实战亲测无任何问题)

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录 钉钉上操作(钉钉告警以关…

密码学新进展:基于同态加密的数据保护是否会成为未来的趋势?

第一章:引言 在今天这个数字时代,数据的重要性不断增加,已经成为了现代社会最宝贵的财富之一。各种机构和企业在日常运营中都会处理大量的数据,包括用户信息、财务数据、产品销售数据等。这些数据的安全性非常重要,因…

2.5 定点运算器的组成

学习目标: 具体包括以下几点: 了解定点运算器的基本概念和分类,包括定点运算器的分类、常见的定点运算器类型等;学习定点运算器的基本组成部分,包括输入/输出接口、寄存器、算术逻辑单元(ALU)、控制单元等&#xff0…

VS Code C++ 输出窗口中文乱码问题解决

VS Code C 输出窗口中文乱码问题解决 系统cmd终端乱码 的情况:原因解决方法:(仅针对cmd终端输出的情况)方法一:更改代码文件的编码方法二 :更改cmd默认终端的编码方式 系统cmd终端乱码 的情况: …

2023年的深度学习入门指南(10) = 前端同学如何进行chatgpt开发

2023年的深度学习入门指南(10) 前端同学如何进行chatgpt开发 在第二篇,我们使用openai的python库封装,搞得它有点像之前学习的PyTorch一样的库。这一节我们专门给它正下名,前端就是字面意义上的前端。 给gpt4写前端 下面我们写一个最土的…

“BIM+智慧工地”精准“数字化”变身智慧工程“管家”

用手机对着满载钢筋的卡车拍照,手指选定一下钢筋范围,几秒后,屏幕就能迅速识别车上有多少根钢筋——这是建筑产业数字化管理智慧工程的应用领域之一。 投资1.78亿元建设的贵州民航产教融合实训基地是集实践教学、社会培训、企业生产保障和科研…

学历与就业:我对“孔乙已长衫”现象的思考

一、你认为社会对于学历和职业之间的关系认知是怎样的? 在当前的社会中,学历往往被看作是一个人能否获得好工作的重要标准。许多用人单位更愿意录取拥有更高学历的求职者,因为他们通常具备更广阔的知识视野和更强的理论基础。然而&#xff0…

Presto之Left Join和Right Join的实现

一. 前言 我们知道,在Presto中,与inner join相比,left join会保留probe表(左表)的所有值,right join会保留build表(右表)的所有值。inner join的是实现在文章Presto之Hash Join 数据…

攻击者可以使用HTML和CSS隐藏“外部发件人”电子邮件警告

导语:研究人员近日证实,Microsoft Outlook等客户端向电子邮件收件人显示的“外部发件人”警告可能被发件人隐藏。 研究人员近日证实,Microsoft Outlook等客户端向电子邮件收件人显示的“外部发件人”警告可能被发件人隐藏。 事实证明&#x…