浅谈iOS内存管理

来源:互联网 发布:机械矩阵沙盘排名 编辑:程序博客网 时间:2024/05/19 10:40

作为一只小菜鸟的一点小总结,请各位见笑

内存管理
内存管理分为两种情况:
第一种:ARC
ARC情况下,是自动释放内存,为系统管理,其中的属性的修饰用strong和weak.strong修饰的是对象,而weak修饰的是assign对应的东西,例如delegate.
在ARC中基本不会出现野指针和内存泄露的情况,但是如果是XXManager的变量 需要注意使用全局变量 防止回调事件不会触发,该管理者就被释放掉.
在ARC下使用MRC文件,需要配置 -fno-objc-arc
在MRC下使用ARC需要配置-fobjc-arc

第二种:MRC
MRC情况下,都是程序员做手动的释放遵循”谁开辟,谁释放”的原则,引用计数+1,就需要相应的释放一下,需要重写dealoce方法,它的属性修饰,需要用retain,copy,assign
其中retain会让引用计数+1,就是相当于拉了一条线指向对象,使一个目标也可以引用到它,对其中的对象进行修改.
copy相当于又照着原来的对象做了一份一摸一样变量,自己使用,可以做任何想做的事儿
assign就是说有那么一个变量,并没有指向它,delegate用的就是assi修饰

MRC中内存管理问题野指针和内存泄露很常见,每一个retain或者copy都需要对应一个release(autorelease) 或者remove
release是直接释放所有权,autorelease是出了自动释放池释放所有权,其中提示bad address code = 1话一般是内存提前释放,又去调用造成的野指针   内存泄露是指没有被释放干净,不会走dealoce方法造成内存被对象长期占用,导致的内存不够用

在block中使用不加修饰的内存指针会导致循环引用需要加上__block __weak typeof(变量名)新名字 = 变量名

autorelease是将对象放到自动释放池中去管理,因此只想要将对象放入一遍即可,不需要多次release

0 0
原创粉丝点击