M牛C原创博客——oc当中的手动内存管理知识要点

来源:互联网 发布:域名一定要公安备案吗 编辑:程序博客网 时间:2024/05/17 22:35

内存管理:

所在的进程空间——堆区,对象是保存在堆区的

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,谁就有责任减一

重写系统的方法不写声明也可以,继承问题

0 0
原创粉丝点击