A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

内存管理的原理和分类
对象的所有权:任何自己创建的对象都归自己所有可以使用名字以“alloc”,“new”开头或名字中包含”copy“的方法开创建对象可以使用retain来获得一个对象的所有权。

对象的引用计数器:每个实例对象都有一个ISA指针,都有一个引用计数器(retainCount)
是一个整数表示对象被 引用的次数(有多少个所有者),即现在有多少东西在使用这个对象

作用:对象刚被创建时,当使用alloc、new、copy创建一个对象时,默认计数器值为1,当计数器的值变为0时,则程序会自动调用dealloc方法,销毁对象。(引用计数器是系统判断销毁对象的唯一标准)(存在一种例外,对象值为nil时,引用计数为0,这个时候,系统是不会销毁对象,回收内存的)

对引用计数器的操作:
retain:计数器+1;
release : 计数器- 1
;retainCount:获得对象当前的引用计数器的值,用lu%打印

对象的销毁:当一个对象的引用计数器为0的时候,系统会自动将对象发送一条dealloc消息,它将会被销毁,其占用的内存将会被系统回收一般会重写dealloc方法,注意:一旦重写了dealloc方法,那么就必须调用【super dealloc】,并且放在代码块的最后调用(注意,不能直接调用dealloc方法),对象一旦回收,那么就不能再使用(会导致程序崩溃,野指针错误。

注意:如果对象的计数器不为0,那么在整个程序运行过程,它占用的内存就不 可能被回收(除非整个程序已经退出)。
.任何一个对象, 刚生下来的时候, 引用计数器都为1。(对象一旦创建 好,默认引用计数器就是1)当使用alloc、new或者copy创建一个对象 时,对象的引用计数器默认就是1。 

OC内存管理分类:
三种:
MRC:手动管理(iOS4.1之前的版本使用)
ARC:自动管理,自动引用计数(iOS5之后推出的)
garbage collection:垃圾回收(iOS不支持垃圾回收)
开发中:需要理解MRC,实际使用计量用ARC3.手动内存管理首先,关闭ARC(因为,现在都iOS9了,所以编译器都是默认使用ARC的)
将ARC项目切换成MRC(手动内存管理):
        1.点击项目名称---->2.build setting---->3.在搜索框里输入auto ----->4. yes->no4.内存管理的原则:
1.只要使用,就要让对象的引用计数器+1,不用了,就需要让其-12.谁创建,谁release3.谁retain,谁release总结:有加就有减,有始就有终

.野指针、僵尸对象、内存泄露
僵尸对象: 已经被销毁,所占内存已经被回收的对象(不能再使用的对象)
野指针: 指向僵尸对象(不可用内存)的指针。
空指针: 没有指向存储空间的指针(里面存的是nil, 也就是0) 
注意:默认情况下xcode为了提

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马