内存管理:
所在的进程空间——堆区,对象是保存在堆区的
1, 主要是管理内存的创建和释放
在iOS中堆内存的创建,释放就叫内存管理
2,内存管理方式:
MRC:手动内存管理
ARC:自动内存管理
引用计数器:是用来记录对象被引用的次数,英文:reference counting
每天对象天生就有一个引用计数器。
TRStudent * stu = 【【TRStudent alloc】init】;
stu就是引用,
引用的次数:一个对象被几个引用使用。
在Xcode5以后,都是强制使用ARC内存管理的,需要手动改成MRC
项目名——Build Settings ——ALL——搜索ARC——Apple LLVM5.1 language Objective 改为no
强制操作系统回收内存:
——————(僵尸对象)也要每次都点————
左上角文件名的停止按钮后的按钮 - exit Scheme - Diagnostics - Enable Zombie Objects
内存管理的机制:
每个对象都有自己的引用计数器,在MRC下引用计数器自己是不能自动操作的。就是多个引用对象不能自动加一,要手动加一
向对象发送【对象 retainCount】消息就可以查看引用计数器的值
当向对象发送alloc、copy、new、消息的时候,该对象的引用计数器会自动设置为一。
当不再使用的时候会发送release消息,通知引用计数器“减一”
当一个引用计数器的值为0的时候,:系统“会自动销毁该对象,并回收该内存空间。
当对象销毁的时候会自动发送dealloc消息。
new相当与相当于想这个对象发送一个alloc消息 TRStudent new = = TRStudent alloc init
内存管理使用不当会出现问题:
通过引用使用一个已经不存在的对象(堆空间),会出现异常crash(exception)。
解决野指针问题:使用空指针来解决野指针问题
对象不在使用的时候,忘记放松release消息,内存泄露、造成浪费
解决野指针问题:1,谁创建的内存谁加1,谁就有责任减一
重写系统的方法不写声明也可以,继承问题