建议
建议
建议
建议
建议
好好考虑一下这几个问题:
- 你做过的最有技术难点的事是什么(技术上的)
- 你看过哪些开源框架,里面的关键点是什么,如何阅读的
- 做过哪些优化,比如性能优化,问题是啥,如果分析定位,怎么做的,结果如何。个人认为可以分为:崩溃治理、内存优化、cpu优化、启动优化、卡顿优化(耗时优化)、APM相关(fps、卡顿、cpu监控)
object内存结构
下面看到头大,有空再看看
https://xietao3.com/2019/05/ARC/
title: “Hybrid 笔记” date: 2020-12-22 22:11:36 +0530 author: taoye categories: [iOS, 2020年复现总结] tags: [iOS] —
性能优化
- 首帧优化 - 打点统计分析,组合类初始化后置, playerURL前置, 聚合接口、播放器缓存复用(从直播间A-B)
- 卡顿优化 - 弹幕互动区优化
- 刷新频率控制
- 后台线程计算布局+draw (coregraphics)
- coreText
- 泄漏优化
- 内存泄漏小工具检测
- 野指针监测工具
- 缓存策略 (缓存做了分类管理、如资源缓存-皮肤、图片缓存、播放器缓存)
- 在线资源缓存、如giftImage、全屏动效、直播间换肤、与h5通信的数据存储等
- 列表的数据缓存 (YYcache)
- 多线程计算、队列的处理
- 比如计算、队列分发等
- 动画性能检测
- 做个svga检测小工具,检测全屏动画对手机性能影响,iphone6s,FPS <40、CPU>100% 内存>40m。 通过charts第三方库输出曲线图,超出标红线
包体积优化
- mach-o text优化
- linkMap file分析
- 根据mach-o,text里的classmethod和使用的classmethodref做过滤,剔除无用方法
- 代码复用 - 如ipad改版、三套代码聚合
- 属性换变量
- masonry的block替换、@weakify替换等
- 资源瘦身
- 资源优化 - 大图下发、unuse图检查删除、删除图片附属信息+压缩、gif转webp、 AssetCataLog管理
- 静态UIh5化 -
- 依赖优化 - 相似代码检查+合并、编译可见域删选(DEBUG)
- 代码优化 - 抽离公共组件或base层提高代码复用、UI布局替换、 细节(readonly string、property->IVar、宏替换检查等)
- 其他 linkmap file 分析
- otool 构建引用图、查找孤立点
- Clang Plugin分析AST优化引用
异常捕获
异常类型
- Mach 异常:EXC_CRASH
- UNIX 信号:SIGABRT
- NSException 异常:应用层,通过 NSUncaughtExceptionHandler 捕获
异常捕获
- 利用 Mach API 捕获 Mach 异常
- 通过 POSIX(可移植性操作系统接口) API 注册 signal(SIGSEGV,signalHandler) 来捕获 UNIX 异常 信号
- 注册 NSUncaughtExceptionHandler 来捕获应用级异常
所有 Mach 异常都在 host 层被ux_exception转换为相应的 Unix 信号,并通过threadsignal将信号投递到出错的线程。iOS 中的 POSIX API 就是通过 Mach 之上的 BSD 层实现的。
UIview动画,从,到展示,经历了哪些过程
锁分类
流程
pre_main 预览
以下截图摘取自大牛博客:
NSMethodSignature的组成
简介
Mach-O二进制文件被组织成段。每个部分包含一个或多个部分。段的大小由它所包含的所有部分的字节数来度量,并四舍五入到下一个虚拟内存页边界。因此,一个段总是4096字节或4千字节的倍数,其中4096字节是最小大小。
预览图
runloop介绍
function loop() { initialize(); do { var message = get_next_message(); process_message(message); } while (message != quit); }
这种模型通常被称作 Event Loop。 Event Loop 在很多系统和框架里都有实现,比如 Node.js 的事件处理,比如 Windows 程序的消息循环,再比如 OSX/iOS 里的 RunLoop。实现这种模型的关键点在于:如何管理事件/消息,如何让线程在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒。 所以,RunLoop 实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行上面 Event Loop 的逻辑。线程执行了这个函数后,就会一直处于这个函数内部 “接受消息->等待->处理” 的循环中,直到这个循环结束(比如传入 quit 的消息),函数返回。 OSX/iOS 系统中,提供了两个这样的对象:NSRunLoop 和 CFRunLoopRef。 CFRunLoopRef 是在 CoreFoundation 框架内的,它提供了纯 C 函数的 API,所有这些 API 都是线程安全的。 NSRunLoop 是基于 CFRunLoopRef 的封装,提供了面向对象的 API,但是这些 API 不是线程安全的。
OSI模型
值得注意的是 DNS 是应用层协议,SSL 分别位于第五层会话层和第六层表示层。TLS 位于第五层会话层。
内存对齐方式
“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。
Prerequisites
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse