
iOS开发进阶
文章平均质量分 83
系统学习iOS开发,为自己这些年来的积累查漏补缺,梳理自己学到的东西,以及更加深入的学习一知半解的部分,这个专栏记录学到的关键点知识,记录学习过程中的问题以及自己的一些思考
学海无涯乐作舟
努力量的积累,期待质的飞跃
展开
-
内存问题OOM
OOM,是的缩写,指的是 App 占用的内存达到了 iOS 系统对单个 App 占用内存上限后,而被系统强杀掉的现象。这么说的话,OOM 其实也属于文章中提到的应用“崩溃”中的一种,是由 iOS 的 Jetsam 机制导致的一种“另类”崩溃,并且日志无法通过信号捕捉到。JetSam 机制,指的就是操作系统为了控制内存资源过度使用而采用的一种资源管控机制。我们都知道,物理内存和 CPU 对于手机这样的便携设备来说,可谓稀缺资源。所以说,在 iOS 系统的虚拟内存管理中,内存压力的管控就是一项很重要的内容。原创 2022-12-01 16:09:33 · 2051 阅读 · 0 评论 -
RunLoop原理及应用
当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程。RunLoop就是控制线程生命周期并接收事件进行处理的机制。RunLoop是iOS事件响应与任务处理最核心的机制,它贯穿iOS整个系统。原创 2022-12-01 15:13:44 · 525 阅读 · 0 评论 -
iOS崩溃监控
现有的崩溃监控系统,不管是开源的崩溃日志收集库还是类似 Bugly 的崩溃监控系统,离最优解都还有一定的距离。这个“非最优”,我们需要分两个维度来看:一个维度是,怎样才能够让崩溃信息的收集效率更高,丢失率更低;另一个维度是,如何能够收集到更多的崩溃信息,特别是系统强杀带来的崩溃。随着 iOS 系统的迭代更新,强杀阈值和强杀种类都在不断变化,因此崩溃监控系统也需要跟上系统迭代更新的节奏,同时还要做好向下兼容。原创 2022-11-28 15:15:28 · 1552 阅读 · 0 评论 -
App瘦身
包括:App Slicing、Bitcode、On-Demand Resources。同时,按照 Asset Catalog 的模板添加图片资源总结下来就是,App Thinning是官方提供的支持,要多了解官方文档获取最新的瘦身方案。原创 2022-11-28 13:25:21 · 361 阅读 · 0 评论 -
无侵入埋点方案
这套方案由于唯一标识难以维护和准确性难以保障的原因,很难被全面采用,一般都只是用于一些功能和视图稳定的地方,手动侵入式埋点方式依然占据大部分场景。原创 2022-11-21 12:26:50 · 877 阅读 · 0 评论 -
Clang、Infer、OCLint、SwiftLint静态分析
OCLint 是基于 Clang Tooling开发的静态分析工具,主要用来发现编译器检查不到的那些潜在的关键技术问题。2017 年 9 月份新发布的 OCLint 0.13 版本中,包含了 71 条规则。这些规则已经基本覆盖了具有通用性的规则,主要包括语法上的基础规则、Cocoa 库相关规则、一些约定俗成的规则、各种空语句检查、是否按新语法改写的检查、命名上长变量名短变量名检查、无用的语句变量和参数的检查。除此之外,还包括了和代码量大小是否合理相关的一些规则,比如。原创 2022-11-21 11:20:33 · 575 阅读 · 0 评论 -
动态库实现极速编译
Flutter 会在点击 reload 时去查看自上次编译以后改动过的代码,重新编译涉及到的代码库,还包括主库,以及主库的相关联库。所有这些重新编译过的库都会转换成内核文件发到 Dart VM 里,Dart VM 会重新加载新的内核文件,加载后会让 Flutter framework 触发所有的 Widgets 和 Render Objects 进行重建、重布局、重绘。inject(tmpfile: String) 的入参 tmpfile 是动态库的文件路径,那么这个动态库是如何加载到可执行文件里的呢?原创 2022-11-21 10:02:01 · 204 阅读 · 0 评论 -
链接器:绑定符号到地址上
Mach-O 文件是编译后的产物,而动态库在运行时才会被链接,并没参与 Mach-O 文件的编译和链接,所以 Mach-O 文件中并没有包含动态库里的符号定义。写这样的代码的过程,就像你直接在和不同平台的机器沟通,连编译生成 AST 和 IR 的步骤都省掉了,甚至优化平台相关的代码都需要你自己编写。dlopen 打开动态库后返回的是引用的指针,dlsym 的作用就是通过 dlopen 返回的动态库指针和函数符号,得到函数的地址然后使用。而链接器的作用,就是完成变量、函数符号和其地址绑定这样的任务。原创 2022-11-21 09:08:18 · 605 阅读 · 0 评论 -
合理的架构设计
因为,改造成组件也是需要时间成本的,很少有公司愿意完全停下业务去进行重构,而一旦决定某业务功能模块要改成组件,就要抓住机会,严格按照 SOLID 原则去改造组件,因为返工和再优化的机会可能不会再有。坏处是每个人都是容易被替代的,但是对个人来说接触到的业务广泛,能吸收到更丰富的知识,长远来说是有益的)直接硬编码的调用方式,参数是以 string 的方法保存在内存里,虽然和将参数保存在 Text 字段里占用的内存差不多,同时还可以避免.h 文件的耦合,但是其对代码编写效率的降低也比较明显。原创 2022-11-17 20:27:02 · 779 阅读 · 0 评论 -
Autolayout布局相关和UIStackView
iOS开发布局方式的演进iOS开发布局方式的演进AutolayoutAuto Layout ,是苹果公司提供的一个基于约束布局,动态计算视图大小和位置的库,并且已经集成到了 Xcode 开发环境里。Autolaout发展历史(2012年6月12日发布iOS6)Autolaout生命周期Auto Layout 不只有布局算法 Cassowary,还包含了布局在运行时的生命周期等一整套布局引擎系统,用来统一管理布局的创建、更新和销毁。这一整套布局引擎系统叫作。原创 2022-11-17 10:56:28 · 286 阅读 · 0 评论 -
App 启动速度怎么做优化与监控?
我的理解:冷却后的启动,也就是app已经被后台杀掉后的启动。如第一次启动app、杀掉app重新进入、app崩溃后重新进入。我的理解:app启动后还活着的时候,再次进入app的过程。1. main() 函数执行前;我的理解是无效代码?问题:+load()方法什么时候调用?参考+load()方法的执行原理+ load+ load+ load+ load+ load问题:写在类以外的变量?2.main() 函数执行后;原创 2022-11-16 15:08:35 · 874 阅读 · 0 评论 -
建立自己的iOS开发体系
从基础、应用开发、原理和原生与前端四个方面建立自己的知识体系。原创 2022-11-16 12:13:17 · 215 阅读 · 0 评论 -
锚定一个点,然后在这个点上深耕
同时,在目前正流行的这波大前端和小程序浪潮中,各种大前端技术都对 Web 标准做了大量限制,定义了自己的规范模板。我非常赞同戴铭老师的这个观点,对于开发技术来说,单单iOS开发相关的东西,要学习的未知的东西都太多了,如果不锚定一个点,定下一个方向的话,会有无从下手的感觉。,如果你看过相关的热修复技术源代码或者架构图的话,应该不难发现热修复技术的核心引擎主要就是。技术看似纷繁杂乱,实则是殊途同归,它们背后都是通用的底层技术和创新的设计思想。所以,你看,只要掌握了热修复中的核心技术,就不难理解。原创 2022-11-16 11:48:56 · 203 阅读 · 0 评论