nihao's blog

Categories · iOS

Home

Archives

About

loading..
内存管理

iOS中的内存管理|循环引用的监测(MLeaksFinder&FBRetainCycleDector)

有哪些方式可以监测循环引用?在引用计数的内存管理方式中,由于对象间的引用,最后引用关系图形成“环”才导致循环引用。因此对循环引用的监测直观的想法只需要找到这个环就可以找到循环引用的地方,也就是在有向图中找环(也可以说在树中找环),同时需要找到环中具体的节点,例如 FBRetainCycleDector 就是采用 DFS 进行图中环的检测与查找。

Read more
loading..
内存管理

iOS中的内存管理|weak

循环引用原因在对象图中经常会出现一种情况,就是几个对象都以某种方式相互引用,从而形成“环”(cycle),同时由于 iOS 中采用引用计数内存管理模型,所以这种情况通常会导致内存泄漏,因为最后没有别的东西会引用环中的对象。这样的话,环里的对象就无法为外界所访问,但对象之间尚有引用,这些引用使得他们都能继续存活下去,而不会为系统回收。例如:

Read more
loading..
内存管理

iOS中的内存管理|AutoreleasePool

基本使用在 ARC 中,使用 AutoreleasePool 非常简单,只需形如以下方式调用即可,编译器会将块中的对象插入类似如 [obj autorelease]; 一样的代码,在超出 AutoreleasePool 块作用域后会自动调用对象的 release 方法,这能延迟对象的释放。但一般来说,并不需要显式使用 @autoreleasepool{ },这是因为在主线程 RunLoop 的每个周期中都会自动进行自动释放池的创建和销毁。

Read more
内存管理

iOS中的内存管理|ARC

iOS 采用什么内存管理方式在 iOS 中,采用自动引用计数(ARC,Automatic Reference Counting)机制来进行内存管理,让编译器来帮助内存管理,无需程序员手动键入 retain、release 等代码进行内存管理,取而代之的是由编译器来插入相关内存管理的代码。这一点的好处在于能够降低程序崩溃、内存泄漏等风险的同时,很大程度上也能够减少程序员的工作量。

Read more
loading..
CocoaPods

CocoaPods使用指南

前言对于大多数软件开发团队来说,依赖管理工具必不可少,它能针对开源和私有依赖进行安装与管理,从而提升开发效率,降低维护成本。针对不同的语言与平台,其依赖管理工具也各有不同,例如 npm 管理 Javascript、Gradle 、Maven 管理 Jar 包、pip 管理 Python 包,Bundler、RubyGems 等等。本文聚焦于 iOS 方面,对 CocoaPods 的使用和部分原理进行阐述。

Read more
loading..
UI

iOS中的事件以及事件传递机制

前言iOS 中有 8 种事件,本文重点介绍触摸事件的传递机制与响应流程。可以带着以下问题阅读: iOS 中有哪些事件类型,谁来进行事件的响应,怎么来响应呢? 触摸事件的传递与响应流程 hitTest 方法的作用,它有什么实践场景? UIControl 与 UIGestureRecognizer 也能响应触摸事件,UIResponder 的响应方式有什么不同?

Read more
loading..
LLDBInstrument

Xcode 中的调试技巧

前言Xcode 内置了许多工具能够帮助开发者进行高效快速的 Debug,例如 LLDB、 Instruments、Debug View Hierarchy、Debug Memory Graph 等。本文将介绍 LLDB 中实用的命令,以及如何利用 Instruments 解决内存相关的问题。

Read more
App启动

iOS 启动优化

前言启动时间往往是一个用户对 APP 的第一影响,如何优化启动时间一直都是个老生常谈的问题。本文结合了 WWDC16、WWDC17与WWDC19的相关 Session 与借鉴老司机的博客,梳理了启动阶段、dyld变化、Mach-O、虚拟内存等内容,简要阐述了如何优化与检测启动时间。

Read more
12