ios内存管理机制2016

1.说一说对内存管理的理解?(原理)
iOS内存管理机制的原理是引用计数,引用计数简单来说就是统计一块内存的所有权,当这块内存被创建出来的时候,它的引用计数从0增加到1,表示有一个对象或指针持有这块内存,拥有这块内存的所有权,如果这时候有另外一个对象或指针指向这块内存,那么为了表示这个后来的对象或指针对这块内存的所有权,引用计数加1变为2,之后若有一个对象或指针不再指向这块内存时,引用计数减1,表示这个对象或指针不再拥有这块内存的所有权,当一块内存的引用计数变为0,表示没有任何对象或指针持有这块内存,系统便会立刻释放掉这块内存。
其中在开发时引用计数又分为ARC(自动内存管理)和MRC(手动内存管理)。ARC的本质其实就是MRC,只不过是系统帮助开发者管理已创建的对象或内存空间,自动在系统认为合适的时间和地点释放掉已经失去作用的内存空间,原理是一样的。虽然ARC操作起来很方便,不但减少了代码量,而且降低了内存出错的概率,但因为ARC不一定会及时释放,所以程序有时候可能会占用内存较大。而MRC若做得好,通过手动管理,及时释放掉不需要的内存空间,便可保证程序长时间运行在良好状态上。

2.内存管理的原则?
谁创建,谁释放,谁+1,谁-1

3.为什么需要内存管理?
内存管理的两大问题:内存泄露(没有释放)和野指针(没有使用或者置空)

4.autoreleasePool和autorelease的作用?
AutoreleasePool(自动释放池)是OC中的一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机。在正常情况下,创建的变量会在超出其作用域的时候release,但是如果将变量加入AutoreleasePool,那么release将延迟执行。
看到这里有人可能会问,那到底延迟到什么时候执行呢?看完本文后,各位心中自然会有答案。
autorelease可以将变量加入autoreleasePool

5.MRC中符合内存管理的set方法的书写
(旧值release,新值retain,赋值)
if (car != _car) {
// 对当前正在使用的变量)做一次release
[_car release];
// 对新车做一次retain,赋值
_car = [car retain];
}

6.属性修饰符
7.什么时候使用autorelease?与release的区别
以下三种情况需要使用autorelease
a.写基于命令行的的程序时,就是没有UI框架,如AppKit等Cocoa框架时。
b.写循环,循环里面包含了大量临时创建的对象。
c.创建了新的线程。(非Cocoa程序创建线程时才需要)

release会释放掉该对象
autorelease会将对象加入到autoreleasePool中,延迟释放。

8.什么是自动释放池?
9.什么是ARC?MRC?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理的基本范围和概念. 程序运行过程中药创建大量的对象, 和其他高级语言类似,在ObjC中对象存储在堆区,程序...
    ValienZh阅读 904评论 0 2
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 2,008评论 1 16
  • 今天看到一篇不错的文章关于OC内存管理的,转载一下与你共享概述我们知道在程序运行过程中要创建大量的对象,和其他高级...
    niceSYT阅读 469评论 0 2
  • 导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...
    千山小畻阅读 2,110评论 0 7
  • 在这座有着三千年历史的古城,那些古老的建筑依然保存完好。虽然偶尔也会有些游人,在它们本就脆弱的墙壁上刻下一组又一组...
    Winmain_Yao阅读 253评论 0 1