OC语言特性

article/2025/11/6 11:02:07

一、分类

1.1做了那些事?(关键词:明私、分解、私公开化)

声明私有方法,分类头文件放到数组文件.m中,不对外暴露

分解体积庞大的类文件 功能复杂的按功能分类

framework私有方法公开化

1.2特点 (关键词:运决议 系统类加)

运行时决议 分类定义好后不立即加到数组类,而是runtime将分类中内容加到对应数组类(分类与扩展最大区别)

能为系统类添加分类 如坐标获取,UI文件

1.3可添加的内容?(关键字:实 类 协 属非实变)

实例方法 类方法 协议 属性非实例变量 通过关联对象添加实例变量

1.4加载调用栈 objc_init ->map_I_images镜像->map_images_nolock->read images->remethodizeclass

1.5分类实现原理/实例方法添加逻辑(关键字:先访后编 覆盖原类 同名编译报错)

最先访最后编译类 同名类法谁生效取决编译顺序 后面的会覆盖前面

分类加方法“覆盖”原类,实际数组类同名方法仍存在

名字相同引起编译报错

二、关联对象

2.1三个方法

id objc_getAssociatedObject(id object,const void *key) 根据指定key到object对象 获取关联值 返回给调用方

id objc_setAssociatedObject(id object,const void *key,id value, objc_AssociationPolicy policy) key和value建立映射关系,关系通过policy关联到object对象 关联策略作用:声明或告知该value是copy、assign还是retain形式关联到数组对象

id objc_removeAssociatedObject(id object) 据指定对象移除所有关联对象

2.2本质

由AssociationsManager管理,AssociationsHashMap存储,所有对象的关联内容都在一个全局容器中

objc_Association objc_AssociationMap AssociationsHashMap

三、扩展

3.1能做什么事?声属方员

声明私有属性、方法、成员变量

3.2特点 编决议 声宿 不系统

编译时决议 只声明形式存在 多寄生于宿主类 不能为系统类加扩展

四、代理

4.1特点 protocol 一对一 weak

以protocol形式体现,用代理模式实现 一对一 weak规避循环引用

五、通知 (关键词:观察 跨层 一对多 通知中心)

5.1特点:用观察者模式实现的 用于跨层传递消息的机制

一对多 发送者经由通知中心广播给多个观察者

5.2如何实现通知机制

在通知中心,系统会维护一个字典,value是数组列表,列表中每一个成员首先应该包含通知接收的观察者,还包含观察者调用的方法。

六、KVO

6.1概念:(关键词:观察者模式 isa-swizzling)Key-value observing 的缩写,观察者模式的又一实现,Apple用isa混写(isa-swizzling)实现KVO

6.2实现原理:(关键词:addObserver: forKeyPath: 运动建NSKVONotifying_A)注册观察者,实际是调用系统的addObserver: forKeyPath:方法,观察者观察A的某一成员变量或属性,系统会在运行时动态创建NSKVONotifying_A,此时会将原来的A的isa指针指向NSKVONotifying_A(继承自原来的A),这也是isa混写技术在KVO的体现,NSKVONotifying_A重写setter方法负责通知所有观察者对象。

七、KVC

7.1概念:键值编码技术 调用某个实例的valueForKey:方法来获取和同名或相似名称实例变量的值,setValue: forKey:设置某一对象中与key同名或相似名称的实例变量的值。

            

7.2是否破坏面向对象编程思想?

类或实例内部某一私有成员变量名称的情况下,在外界可以通过已知的key对私有成员变量进行访问或设置操作

7.3访问器方法是否存在的判断逻辑?getKey Key isKey

成员变量 _key _isKey key isKey

八、属性关键字

读写权限readwrite readonly 原子性atomic nonatomic 引用计数retain/strong assign/unsafe_unretained weak copy

8.1 atomic (赋获线安全 不作访)保证赋值和获取线程安全,不代表操作和访问。如数组增删对象不在赋值范围内,不保证线程安全

8.2 assign(基数型 但对象型不改引计 悬垂指针致泄漏)

可以修饰基本数据类型,也可以修饰对象类型。

但修饰对象类型的时候,不改变引用计数。

被释放后继续指向原地址,由于悬垂指针导致内存泄漏或者异常

8.3 copy (浅 拷地址 增引计 指同空间 深 同内容不同地址 新空间 不增引计)

浅拷贝 拷贝内存地址,增加引用计数,指向同一块内存空间

深拷贝 开辟新的内存空间,不增加引用计数,内容相同的不同内存地址

mutablecopy可变深拷贝 copy不可变 不可变深 可变浅

无论对象可变还是不可变,mutablecopy后都是可变对象 深拷贝

copy后都是不可变对象 不可变对象深拷贝 可变对象浅拷贝

8.4 retain unsafe unretained MRC strong ARC

MRC如何重写retain修饰变量的setter方法?传进来的不是原来的对象(若传进来对象恰好是原来的对象,被release,再通过obj指针访问被释放废弃的对象就会导致程序异常,crash),对新对象进行release操作,对新传进来的对象进行retain操作,同时赋值给成员变量

8.5 weak (不改 释放置nil)不改引计 对象被释放自动置nil


http://chatgpt.dhexx.cn/article/6WTtM2fb.shtml

相关文章

下载各版本cuda,下载以前版本的cuda

1.打开网址https://developer.nvidia.com/cuda-toolkit-archive 2.下载10.1版本就点击CUDA Toolkit 10.1 3.如图选择自己的版本。 4.打开这个网址就可下载。 5.cd到下载目录,执行sudo sh 文件名 指令 6.移动到continue按enter键确认 7.回复accept 8.不安装驱动 9.安…

Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27)

Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27) 一、更新电脑显卡驱动(以mx150为例) 1、打开英伟达驱动下载官网:https://www.nvidia.cn/geforce/drivers/ 2、直接下载自动更新程序&#xff0c…

NVIDIA CUDA和cuDNN显卡历代版本下载地址

NVIDIA显卡计算能力一览表 https://developer.nvidia.com/cuda-gpus Halcon图像库支持深度学习,GPU计算能力要求3.0以上 深度学习必备 先安装N卡的显卡驱动--->再安装cuda-->最后安装cuDNN 显卡驱动 1、NVIDIA官方 https://www.nvidia.cn/Download/index…

Windows 下载与安装CUDA和Pytorch【安装教程、深度学习】

参考链接:Windows 下安装 CUDA 和 Pytorch 跑深度学习 - 动手学深度学习v2_哔哩哔哩_bilibili 0.准备工作 请确保你是NVIDIA的显卡(不能是AMD、集成显卡) 1.下载CUDA 打开developer.nvidia.com/cuda-downloads,打开有点慢 选择…

CUDA下载,以及下载GPU版本的pytorch

一、下载anaconda 因为这步我之前就下好了,主要参考这个链接:史上最全最详细的Anaconda安装教程 二、下载CUDA 1.首先观察自己需要什么版本的CUDA,以及是否安装过CUDA 先cmd,输入命令 nvidia-smi结果如下,所以我们…

[cuda]cuda驱动版本对应+旧版本cuda下载网址

一、背景 本文用于记录在安装cuda时可能需要的网址,留作己用。 二、cuda、nvidia驱动版本对应关系 1. cuda需要的最低驱动版本 2. cuda与对应的驱动版本 三、旧版本cuda下载网址 所有版本的cuda下载地址如下: cuda Toolkit Archive.

下载和安装CUDA和Cudnn(图文详解)

Pytorch环境需要用到CUDA,所以我们要安装CUDA的驱动。这里我安装的是CUDA10.0,对应的Cudnn是7.4.1。 一、下载 CUDA10.0的官网地址,选择好自己所需版本,这里是我推荐的选择,然后点击Download。 cudnn官网地址&#x…

cuda 10.1 下载

最近发现百度到的关于CUDA10.1版本的安装的文章,给的链接已经是10.2版本的了。想找个10.1版本的有点艰难,不过其实官网有历史版本的下载入口的 进入这个地址https://developer.nvidia.com/cuda-toolkit-archive,可以下载旧版本的CUDA 不想去官…

cuda官网下载,本机显卡驱动与cuda、cudnn、pytorch、torchvision安装版本对应表,以及完全卸载CUDA方法

注:如果执行第一步没有找到nvidia-smi指令,重装本机NVIDIA驱动(Linux, Windows 标题中各项版本对应) 重装NVIDIA驱动,选择自己的显卡产品系列和产品编号, 如下图 GeForce RTX 30系列,产品是3080 Ti,系统windows 10 64…

CUDA的下载安装

大家好,下面将进行CUDA的下载安装,下载安装的详细步骤描述如下: (1)CUDA下载 https://download.csdn.net/download/qq_41104871/87462747 (2)CUDA安装 1、首先,需要解压缩下载好的CUDA压缩包,CUDA压缩包如下图所示: 2、解压后,将会获得如下图所示的.exe文件:…

cuda 各个版本下载

目录 cuda各个版本下载: cudnn会列出来对应cuda版本 需要登录,点击更多登录方式,微信登录也可以。 2022.08.10来看,网站还是有效的; cuda各个版本下载: https://developer.nvidia.com/cuda-toolkit-arc…

Cuda11.6 下载与安装[排坑版]

2022年7月份买了一台惠普光影7的笔记本,自带了Win11系统和Cuda 11.6。之前运行在Cuda10上的tensorflow代码在运行过程中调用cuda就会报错。cuda11.6是预装的,还很难替换。重装Win10系统还把电脑干崩了。无奈花钱重装成了原来的系统,下面讲一下…

Windows下载安装cuda10.1详细步骤

第一步:去百度上搜索cuda10.1 第二步:点击Windows,x86_64,10,exe(local),然后点击Download[2.4G],即可下载 第三步:安装过程 (1)双击: &#xff…

系统结构图:最大扇入、扇出数,深度和宽度的区别

1、最大扇入扇出数 最大扇出数,即模块直接调用的下层模块数目,可以看一个模块向下辐射出去的第一层的模块数。 同理,最大扇入数,即模块被直接调用的上层模块最大数目,可以看一个模块向上辐射出去的第一层的模块数。 2、…

GoLang使用Goroutine+Channel实现流水线处理,扇入扇出思想解决流水线上下游供需不平衡

码字不易,转载请附原链,搬砖繁忙回复不及时见谅,技术交流请加QQ群:909211071 目的 在一些业务逻辑场景中, 我们要针对同一批数据依次进行不同的处理,并且它们之间是有先后顺序的。比如我们制造一个手机要经…

mccabe java_面向过程及面向对象的扇入及扇出

面向过程的扇入及扇出: 扇入:是指直接调用该模块的上级模块的个数。即:called by个数 (在McCabe 里度量名称为Fan in) 扇出:该模块直接调用的下级模块的个数。即:calls to 个数(在McCabe 里度量名称为Fan out) 面向对象…

代码静态分析思维体操—扇入、扇出、圈复杂度

静态分析是一种检查代码的方法,无需执行程序。它提供了一种机制,可以审查代码结构、控制流和数据流,检测潜在的可移植性和可维护性问题,计算适当的软件质量测度。 其中控制流分析包括:扇入、扇出和圈复杂度。 常见流程图结构 一种常见的程序分析方法是通过生成程序的有向控…

FPGA Fanout-Fanin(扇入扇出)

在谈到多扇出问题之前,先了解几个相关的信息,也可以当成是名词解释。 扇入、扇出系数 扇入系数是指门电路允许的输入端数目。一般门电路的扇入系数为1—5,最多不超过8。扇出系数是指一个门的输出端所驱动同类型门的个数,或称负载…

关于 FPGA 内部信号扇入扇出

转自https://www.cnblogs.com/dxs959229640/p/3870189.html 关于 FPGA 内部信号扇入扇出 扇入、扇出系数 扇入系数是指门电路允许的输入端数目。一般门电路的扇入系数为1—5,最多不超过8。扇出系数是指一个门的输出端所驱动同类型门的个数,或称负载能力。…