Tech Direction
- Cocos3d
- Unity
- ARKit
- RealityKit
- SceneKit
- SpriteKit
- Java后端开发
- 音视频开发(FFMpeg)
- weex, uniapp, JavaScriptCore
- Javascript
- C++
- Flutter
- SwiftUI
Tech-Points
断点续传深入全面理解
设计模式
继续深入整合OC底层原理
加强对app架构的理解和表述能力
加强数据结构和算法的练习
继续学习Java
继续学习Web
继续深入学习音视频编解码
继续深入学习OpenGL
关于tableView优化的思考
关于程序内存布局的思考
- 未运行或启动时,程序或软件以可执行文件的形式存储在硬盘上
- windows平台的可执行文件格式为 PE
- MacOS, iOS平台的可执行文件为Mach-O
- Linux平台的可执行文件为ELF
- 程序启动后被加载到内存
- 程序的内存区域主要分为:代码段,数据段,堆段,栈段
- 所有函数无论定义在哪里,在内存中都存储在代码段
- 代码段是不可修改的
关于runtime的理解(程序全局去思考)
关于引用类型和值类型的思考
- 值类型赋值会发生深拷贝
- swift标准库种的值类型有copy-on-write技术来提升性能
- 值类型主要变现在行为
- 值类型底层可以存储在堆上
- 值类型的内存可以在全局区,栈区,堆区
- 引用类型一定存储在堆上,考引用计数进行内存管理
关于Swift中String的存储
- a. String在行为上被实现为值类型
- b. 当字符数小于16时,字符串占16字节的内存,其中第9个字节用来存储标识及长度,其余15字节用来存储值或内容
- c. 当字符长度大于15字节时,字符串地址的后8字节存储真正的地址值,前八个字节的最后一个字节存储长度,第一个字节存储标识
- d. c中第一个字节是0xd0标识存储在常量区,0xf0标识存储在堆区
- e. b中标识符为0xe标识存储方式类似TaggedPointer
关于Swift中Array的存储
- Array在行为上被实现为值类型
- Array的低层存储,利用汇编进行探索,可以发现存储在堆上
关于内存对齐的思考
- 在MacOS, iOS平台,操作系统在用malloc分配堆内存时按16字节对齐,也就是说分配的堆内存大小是16的倍数
- 分配内存的内存同时存储多种类型的数据时,也存在内存对齐,比如char, int同时存储室,会以较大的int类型对齐