![loading..](/images/blog/image-20230814165245228.png)
![loading..](/images/blog/image-20230814165245228.png)
iOS中的内存管理|循环引用的监测(MLeaksFinder&FBRetainCycleDector)
有哪些方式可以监测循环引用?在引用计数的内存管理方式中,由于对象间的引用,最后引用关系图形成“环”才导致循环引用。因此对循环引用的监测直观的想法只需要找到这个环就可以找到循环引用的地方,也就是在有向图中找环(也可以说在树中找环),同时需要找到环中具体的节点,例如 FBRetainCycleDector 就是采用 DFS 进行图中环的检测与查找。
Read more![loading..](/images/blog/image-20230731154644415-0789607.png)
![loading..](/images/blog/image-20230731154644415-0789607.png)
iOS中的内存管理|weak
循环引用原因在对象图中经常会出现一种情况,就是几个对象都以某种方式相互引用,从而形成“环”(cycle),同时由于 iOS 中采用引用计数内存管理模型,所以这种情况通常会导致内存泄漏,因为最后没有别的东西会引用环中的对象。这样的话,环里的对象就无法为外界所访问,但对象之间尚有引用,这些引用使得他们都能继续存活下去,而不会为系统回收。例如:
Read more![loading..](/images/blog/image-20230724164816710.png)
![loading..](/images/blog/image-20230724164816710.png)
iOS中的内存管理|AutoreleasePool
基本使用在 ARC 中,使用 AutoreleasePool 非常简单,只需形如以下方式调用即可,编译器会将块中的对象插入类似如 [obj autorelease]; 一样的代码,在超出 AutoreleasePool 块作用域后会自动调用对象的 release 方法,这能延迟对象的释放。但一般来说,并不需要显式使用 @autoreleasepool{ },这是因为在主线程 RunLoop 的每个周期中都会自动进行自动释放池的创建和销毁。
Read moreiOS中的内存管理|ARC
iOS 采用什么内存管理方式在 iOS 中,采用自动引用计数(ARC,Automatic Reference Counting)机制来进行内存管理,让编译器来帮助内存管理,无需程序员手动键入 retain、release 等代码进行内存管理,取而代之的是由编译器来插入相关内存管理的代码。这一点的好处在于能够降低程序崩溃、内存泄漏等风险的同时,很大程度上也能够减少程序员的工作量。
Read more![loading..](/images/blog/IMG_0120.jpeg)
![loading..](/images/blog/IMG_0120.jpeg)
nihao' 2022年终总结
2022 对我来说过的很快,还记得 2022 年年初的时候,杭州刚好突发了疫情,而我所在的小区刚好是疫情的重点防护区。因此,理所当然的我被拉进了酒店隔离,每天过着核酸 - 盒饭的生活,这几乎花光了春节的时光;每天都有一次的核酸检测,几乎时间都分配在了早上 6 点左右,与此同时,走廊上的大喇叭的噪音也不堪入耳,起初最难以接受的是鼻咽拭子,每次做完都感觉很生气,不过好在我都能接受。
Read more![loading..](https://raw.githubusercontent.com/xuhaodong1/resource/master/image-20221215171557476.png)
![loading..](https://raw.githubusercontent.com/xuhaodong1/resource/master/image-20221215171557476.png)
CocoaPods使用指南
前言对于大多数软件开发团队来说,依赖管理工具必不可少,它能针对开源和私有依赖进行安装与管理,从而提升开发效率,降低维护成本。针对不同的语言与平台,其依赖管理工具也各有不同,例如 npm 管理 Javascript、Gradle 、Maven 管理 Jar 包、pip 管理 Python 包,Bundler、RubyGems 等等。本文聚焦于 iOS 方面,对 CocoaPods 的使用和部分原理进行阐述。
Read more![loading..](/images/blog/responderChain.png)
![loading..](/images/blog/responderChain.png)
iOS中的事件以及事件传递机制
前言iOS 中有 8 种事件,本文重点介绍触摸事件的传递机制与响应流程。可以带着以下问题阅读: iOS 中有哪些事件类型,谁来进行事件的响应,怎么来响应呢? 触摸事件的传递与响应流程 hitTest 方法的作用,它有什么实践场景? UIControl 与 UIGestureRecognizer 也能响应触摸事件,UIResponder 的响应方式有什么不同?
Read more![loading..](/images/blog/image-20220420112717291.png)
![loading..](/images/blog/image-20220420112717291.png)
Xcode 中的调试技巧
前言Xcode 内置了许多工具能够帮助开发者进行高效快速的 Debug,例如 LLDB、 Instruments、Debug View Hierarchy、Debug Memory Graph 等。本文将介绍 LLDB 中实用的命令,以及如何利用 Instruments 解决内存相关的问题。
Read more![loading..](/images/blog/image-20220328172310546.png)
![loading..](/images/blog/image-20220328172310546.png)
iOS中的多线程与线程安全
前言在 iOS 中有 3 种线程管理安全,分别是 NSThread、GCD 与 NSOperation,不包含几乎不直接使用的 pthread 。本文就其使用特点以及重要的 API ,以及线程安全等方面进行总结。
Read more![loading..](/images/blog/iOS%E5%BA%94%E7%94%A8%E5%86%85%E5%AD%98%E5%88%86%E5%8C%BA.png)
![loading..](/images/blog/iOS%E5%BA%94%E7%94%A8%E5%86%85%E5%AD%98%E5%88%86%E5%8C%BA.png)
Swift 内存模型与方法调度
前言本文从内存分区、内存对齐、内存模型与方法派发角度介绍了关于 Swift 中的一些知识点。
Read more