ios八股文 -- Objective-c

分类

  1. 声明私有方法

  2. 分解体积庞大的类文件

  3. 把Framework的私有方法公开化

特点:

运行时决议

为系统类添加分类:不能给系统类添加扩展

分类中可以添加的内容

  1. 实例方法

2.类方法

3.协议

4.属性:声明的对应的get和set方法,并没有添加实例变量

分类的加载

编译时倒序遍历,最先访问最后编译的分类,也就是最后编译的分类中的方法会生效

并且分类方法会覆盖宿主类方法,因为我们时根据选择器名称查找的吗,并且找到第一个就返回,所以宿主类方法依然存在,但是被覆盖

关联对象

该方法用来给分类添加成员变量

  1. objc_setAssociatedObject - 为对象设置关联值
  2. objc_getAssociatedObject - 获取对象的关联值
  3. objc_removeAssociatedObjects - 移除对象的所有关联值

设置关联对象时需要指定内存管理策略,常用的有:

  • OBJC_ASSOCIATION_ASSIGN - 弱引用(类似 assign)
  • OBJC_ASSOCIATION_RETAIN_NONATOMIC - 强引用,非原子性(类似 strong, nonatomic)
  • OBJC_ASSOCIATION_COPY_NONATOMIC - 复制,非原子性(类似 copy, nonatomic)

关联对象的本质

其核心是通过全局哈希表来动态维护对象与附加数据的关联关系。

全局哈希表 :由objc_association_manager管理,键是被关联的对象(id) ,值是该对象对应的objc_association_map(即该对象的所有关联属性集合)

扩展

声明私有属性

声明私有方法

声明私有成员变量

特点

编译时决议

只以声明的形式存在,多数情况下寄生于宿主类的.m文件中

不能为系统类添加扩展

代理

一种软件设计模式

传递方式为1对1

一般以weak以规避循环引用

通知

使用观察者模式来实现的用于跨层传递消息的机制

传递方式为一对多

在通知中心存在一个map,存在通知名称和观察者列表的映射

KVO

key value observing

观察者设计模式的又一实现,使用来isa混写机制来实现

当我们调用addobserver这个方法的时候,系统会为我们动态创建NSKVONotifying_A这个类(继承A,重写setter方法),然后将原来类A的isa指针指向这个新的类

通过kvc设置value会使value生效

但是通过成员变量直接赋值不会使value生效,但是我们可以添加willchange或者didchange实现手动KVO实现

相关推荐
小木_.24 分钟前
Python 离线识别滑块缺口距离,项目推荐
开发语言·python·滑块识别·人机验证·滑块缺口·缺口识别
liliangcsdn37 分钟前
因子权重矩阵处理-因子权重收缩Shrinkage算法的探索
开发语言·python·机器学习
aramae1 小时前
模拟实现strstr函数(C语言)
c语言·开发语言·算法
liliangcsdn2 小时前
因子权重矩阵处理-滞回缓冲带+降频稳定化动态重选
开发语言·python·算法
ShuiShenHuoLe2 小时前
golang-jwt v5 入门
开发语言·后端·golang
泡泡鱼(敲代码中)2 小时前
Python语法技术学习笔记
开发语言·笔记·python·学习·pycharm
hqyjzsb2 小时前
Python 技术人转型 AI:CAIE Level I、Level II 对比怎么选
开发语言·人工智能·python·金融·数据挖掘·数据分析·aigc
Anhty3 小时前
叮咚变声器上手实测,iOS短板、安卓悬浮窗使用感受分享
android·人工智能·功能测试·ios·智能手机
承渊政道3 小时前
【Python编程—从入门到实践】(Python字典:从基础语义到现代工程实践)
开发语言·python·pycharm·字典·嵌套
luj_17683 小时前
一线一区一变破解人盯人防守密码
开发语言·网络·c++·经验分享·算法