当前位置: 首页 > 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.lryc.cn/news/626611.html

相关文章:

  • 机器翻译 (Machine Translation) 经典面试笔试50题(包括详细答案)
  • 游戏本不插电源适配器不卡设置教程
  • 面试 TOP101 二分查找/排序专题题解汇总Java版(BM17 —— BM22)
  • TENON AI-AI大模型模拟面试官
  • keepalived简介
  • 阿里通义千问Qwen-Long 快速文档解析
  • 商城系统开发全解析:架构设计、功能模块与技术选型指南
  • Tumblr长文运营:亚矩阵云手机助力多账号轮询与关键词布局系统
  • AI一周事件(2025年8月13日-8月19日)
  • 手机 浏览器调用摄像头扫描二维码Quagga
  • 如何将数据从 iPhone 转移到 vivo?
  • 23种设计模式——构建器模式(Builder Pattern)详解
  • Jenkins服务器配置SSH
  • 【Ansible】变量、机密、事实
  • 云计算学习100天-第25天
  • ansible中roles角色是什么意思?
  • 苹果XR芯片介绍
  • 【JavaEE】多线程 -- 定时器
  • GO环境变量中GO111MODULE到底是干啥的?
  • 心路历程-了解网络相关知识
  • 【论文阅读】Multi-metrics adaptively identifies backdoors in Federated Learning
  • Azure 使用记录
  • mapbox高阶,结合threejs(threebox)添加建筑glb模型,添加阴影效果,设置阴影颜色和透明度
  • 通过try-catch判断数据库唯一键字段是否重复
  • linux的内核符号表
  • 【表的操作】
  • 深入理解 Linux 多线程
  • mysql-8.0.37-linux-glibc2.12-x86_64安装
  • 可实现三重空间感知:Ai2 开源具身机器人 AI 模型 MolmoAct
  • 从防抖节流到链表树:编程世界中的抽象优化艺术