博客> 内存管理
内存管理
2017-11-23 03:08 评论:0 阅读:256 孤雁南飞
ios

一、内存管理原则

只要还有人在使用某个对象,那么这个对象就不会被回收;只要你想使用这个对象,那么就应该让这个对象的引用计数器+1;当你不想使用这个对象时,应该让对象的引用计数器-1;

谁创建,谁release

1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法 2)不是你创建的就不用你去负责

谁retain,谁release

只要你调用了retain,无论这个对象时如何生成的,你都要调用release

总结 有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1. ARC机制

ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release。在对象被创建时retain count+1,在对象被release时count-1,当count=0时,销毁对象。程序中加入autoreleasepool对象会由系统自动加上autorelease方法,如果该对象引用计数为0,则销毁。那么ARC是为了解决MRC手动管理内存存在的一些而诞生的。

自动释放池

autorelease方法不会改变对象的引用计数器,只是将这个对象放到自动释放池中; 自动释放池实质是当自动释放池销毁之后,调用release方法,但是不一定能够销毁对象,例如:当对象引用计数器值大于1时,该对象就无法销毁; 由于自动释放池最后统一销毁对象,因此如果一个操作比较占用内存,例如:对象较多或者对象占用资源较多,最好不要放到自动释放池或者放到多个自动释放池; OC中类库的类方法一般都不需要手动释放,因为内部已经调用了autorelease方法; 虽然ARC给我们编程带来的很多好多,但也可能出现内存泄露。如下面两种情况:

循环参照:A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放。

死循环:如果有个ViewController中有无限循环,也会导致即使ViewController对应的view消失了,ViewController也不能释放。

收藏
0
sina weixin mail 回到顶部