nihao's blog

Tags · 内存管理

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