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

iOS知识复习

block原理

OC block 是个结构体,内部有个一个结构体成员 专门保存 捕捉对象

Swift闭包 是个函数,捕获了全局上下文的常量或者变量

修改数组存储的内容,不需要加_block,修改数组对象本身时需要

weak原理

Weak 哈希表 (散列表),一个关键字 映射几个存储值,提高查询效率,释放时候遍历释放

引用计数retaincount的值 存在 isa指针中,过大会存在一个sidetable中

Isa指针是指向对象所属类/元类的指针,每个对象都有一个isa指针

Weak会自动置为nil,unsafe unretain不会,容易出现野指针

category原理

category_t的结构体,存储类名,方法列表

运行时添加方法,同名方法会存放在前面,导致执行时执行了category的方法

objc_msgSend(receiver, selector)

对象是动态类型,可以在运行时向对象发送消息,也就是某个方法没有实现,编译不会报错。

根据isa指针 找到 实际所属的类,然后在该类的方法列表 及 父类的方法列表,找到后运行,再最顶层父类找不到对应方法,则unrecognized selector 异常

类方法 其实在runtime 层还是实例方法

Runloop 是一个一直在执行的while循环,主线程默认开启,子线程需要手动开启,有3种源,执行时会判断timer sourece0 source1,应用 基本的scroll滑动时,timer会停止,需要添加到runloop trackmode中。其他例如autoreleasepool 等一次runloop执行会释放一次池,事件响应,手势,UI更新,timer

Autoreleasepool大括号作用域结束后释放,数据结构是个双向链表

元类meta_class 作用

1、支持动态方法解析,当对象方法不存在时,尝试从继承链中查找/动态添加方法

2、支持类别,当类别扩展了类的功能时,元类负责管理类别的新增方法 及原有方法

3、完整对象和类的关系,是描述类的类

4、消息转发机制的基础,

class_copyIvarList所有属性及大括号中的变量

class_copyPropertyList声明的属性

class_ro_t 类在编译器确定的属性 方法 协议,没有分类的方法。只读

class_rw_t 运行时生成的

KVO 原理

addObserver时,创建了新的子类,并将对象转为新子类的对象,在新子类中添加willchange didchange方法

关闭autoNotifyObserver后,需要手动调will didchange触发

函数返回一个对象时,会对对象 autorelease ,延长对象生命周期

悬垂指针- 只留下了指针,内存释放了,指针没释放

五大区,栈(系统) 堆(程序) 静态 字符串常量 代码区

类别添加属性,通过关联对象,存储在全局的一个哈希表中

performselector after 子线程中不起作用,原理是内部起了timer处理,而子线程中runloop默认没有,timer就不起作用

Dispatch after 原理是延迟执行,而不是到达延迟时间后执行

检测卡顿:

使用cadisplaylink监控FPS ,简单直观但无法定位堆栈

监听runloop,阀值不好控制,能定位堆栈

Ping主线程,能定位堆栈,能记录卡顿时间,阀值

反射:类 协议 selector

TCP/IP 五层协议 物理层 数据链路层 网络层 传输层 应用层

大文件:边下载边存入本地,避免占用大内存 NSFileManager

http://www.lryc.cn/news/2385597.html

相关文章:

  • rce命令执行原理及靶场实战(详细)
  • Fuzz 模糊测试篇JS 算法口令隐藏参数盲 Payload未知文件目录
  • 展示了一个三轴(X, Y, Z)坐标系!
  • 【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter1 初识小程序 - 3项目目录结构4快速上手
  • LLM Tuning
  • 云计算与大数据进阶 | 28、存储系统如何突破容量天花板?可扩展架构的核心技术与实践—— 分布式、弹性扩展、高可用的底层逻辑(下)
  • SQL每日一练(3)
  • Axure高级交互设计:中继器嵌套动态面板实现超强体验感台账
  • 水利数据采集MCU水资源的智能守护者
  • 函数式编程思想详解
  • SAP全面转向AI战略,S/4HANA悄然隐身
  • origin绘图之【如何将横坐标/x设置为文字、字母形式】
  • 工业智能网关建立烤漆设备故障预警及远程诊断系统
  • cv2.VideoWriter_fourcc(*‘mp4v‘)生成的视频无法在浏览器展
  • MySQL 8.0 OCP 1Z0-908 161-170题
  • Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理
  • React从基础入门到高级实战:React 基础入门 - 简介与开发环境搭建
  • LM-BFF——语言模型微调新范式
  • NVMe高速传输之摆脱XDMA设计2
  • github开源版pymol安装(ubuntu22.04实战版)
  • pycharm无需科学上网工具下载插件的解决方案
  • Halcon计算点到平面的距离没有那么简单
  • 基于DenseNet的医学影像辅助诊断系统开发教程
  • 数据中台如何设计?中台开发技术方案,数据治理方案,大数据建设方案合集
  • Python爬虫设置IP代理
  • Adminer 连接mssql sqlserver
  • C++系统IO
  • 利用 Python 爬虫获取唯品会 VIP 商品详情:实战指南
  • DELL EMC PowerStore BBU更换手册
  • css五边形