项目相关-野指针调试

野指针是指指向未知或者无效内存地址的指针。出现野指针的场景是实例对象被释放之后,指向对象的指针并没有被置空,还是指向原来的内存地址,这时候访问这个指针就可能会出现野指针错误。野指针错误对应的 Mach Exception 类型 EXCBADACCESS,对应的 Signal 是 SIGSEGV 和 SIGBUS。 在 iOS 开发中内存管理从 MRC 向 ARC 以及编程语言从 ...

项目相关-检测内存泄漏

这篇文章尝试找到检测内存泄漏的方法。 在 iOS 开发中 MRC 向 ARC 过度以及 OC 向 Swift 过度的过程中,野指针问题已经很少出现了,但也还是可能会有相关的野指针的问题,参考Sunny老师的这篇文章,ARC 的机制不光是要保证内存安全,也同时要兼顾性能,所以像上面一些极个别场景 ...

项目相关-提升稳定性

日常开发中我们最关注的一个指标就是 App 的崩溃率,所以「如何提升应用的稳定性」这个话题就显得比较重要。 这篇文章尝试从项目层面以及 Crash 防护层面来聊聊我理解的提升稳定性的方法。 项目层面 功能开关 当项目要增加一个技术相关的模块儿,比如我们开发了一个基于 Runloop 监听卡顿的技术需求,假设测试同事在测试的时候并没有覆盖到所有的测试场景,同时这个技术需求开发的 ...

项目相关-崩溃类型

本文罗列一下目前项目中遇到的崩溃的场景以及对崩溃的理解。 崩溃场景 dispatch_group 非对称调用 Firebase 后台看到的异常信息 BUG IN CLIENT OF LIBDISPATCH: Unbalanced call to dispatchgroupleave() 原因是多调用了一次 dispatchgroupleave(), ...

理解离屏渲染

本文关注如下几个问题 iOS 平台上离屏渲染的概念? 为什么需要离屏渲染? 离屏渲染到底好还是不好?能避免离屏渲染吗?如何优化? 之前聊聊iOS渲染这篇文章里介绍了正常情况下渲染视图的架构方式,如图,那什么是离屏渲染? ...

聊聊 iOS 渲染

本文尝试回答几个问题。 CALayer 是什么 drawRect 和 CALayer 的关系 一个视图是如何渲染到屏幕上的? 视图的基本展示单元 CALayer 我们在 iOS 日常开发用到的最常用的视图控件就是 UIView。大多数开发者也知道 UIView 是对 CALayer 的一次封装,CALayer 属性才是真正的控制展示的部分。对 `UIVie ...

面向中国独立开发者的移动应用备案流程

2023年8月4号国内工信部发了关于展开移动互联网应用程序备案的通知。包括不同平台(iOS/Android)上的移动应用以及各种平台的小程序,都需要进行备案了。**这篇文章介绍的是 iOS 平台上个人开发 ...

苹果应用主体迁移记录

关于 App 转移可以先看下苹果的这个官方文档,对总体的迁移流程有个底 Overview of app transfer。 前期准备 确认App符合转让资格 在商店对应应用后台,查看「App ...

Objective-C运行时学习笔记-消息派发机制

之前的文章文章聊了一下Objective-C运行时机制的内容,这篇接着上篇文章最后的引子,继续聊一下 Objective-C 的运行时消息发送机制。 Objective-C 的消息发送机制全都依赖于运行时,这点是和新晋的 Swift 语言有很大的不同,Swift 的消息派发机制主要是依赖于静态绑定(static binding),即编译器明确的知道要执行哪个方法,直接生成在编译的时候就生成好跳转 ...