当前位置: 首页 > news >正文

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实现

http://www.dtcms.com/a/340751.html

相关文章:

  • Java EE ----- Spring Boot 日志
  • 【JavaEE】(17) MyBatis 基础
  • 【JavaEE】多线程(线程安全问题)
  • k8sday12数据存储(1/2)
  • 【表的操作】
  • 开源大模型如何选择?GPT-OSS综合评估
  • HTML--pre标签的作用
  • 决策树1.2
  • Flink学习
  • 数据安全事件分级
  • 嵌入式的各个要点总结(不断更新)
  • Building Systems with the ChatGPT API 使用 ChatGPT API 搭建系统(第二章学习笔记及总结)
  • idea maven 设置代理
  • SSM从入门到实战:2.1 MyBatis框架概述与环境搭建
  • 【STM32】HAL库中的实现(六):DAC (数模转换)
  • 调用海康威视AI开放平台接口实现人体关键点检测
  • Java毕业设计选题推荐 |基于SpringBoot+Vue的知识产权管理系统设计与实现
  • langchain-ds的报告生成提示词
  • 如何低比特量化算法的工程实战与落地优化
  • 从零开始的云计算生活——第四十七天,细水长流,kubernetes模块之ingress资源对象
  • 开源 AR 眼镜怎么选?OpenGlass ,OSSG,cheApR 分析推荐
  • 无需驱动!单文件实现键盘按键禁用的技术方案
  • 通用物联网接口调用完整解决方案2
  • Ubuntu_22.04安装文档
  • k8s--Discuz论坛lnmp平台部署
  • 软件可视化与前端、后端技术开发的关系
  • WPF MVVM进阶系列教程(四、ViewModel通信)
  • std::map 的插入元素方式
  • 下拉组件Tag支持自定义背景颜色,图片组支持设置刷新频率,DataEase开源BI工具v2.10.12 LTS版本发布
  • iOS 应用上架常见问题与解决方案,多工具组合的实战经验