20160812Object-c关于内存管理一

来源:互联网 发布:mysql 自带记录行号 编辑:程序博客网 时间:2024/05/16 02:19

OC使用引用计数来管理内存,每个对象都有可以递增或者递减的计数器。计数器用以表示有多少的事物想令此对象继续存活下去。


自动释放池:在OC中引用计数架构中,自动释放池一个重要的概念。调用release会立刻递减对象的保留计数,但是有时候可以调用autorelease,次方法会在稍后递减引用计数,通常是在"事件循环"(Event Loop)时递减。


保留环:呈环壮相互引用的多个对象,这种情况可能导致内存泄露。


dealloc:在dealloc 方法中只释放引用并解除监听。

对象在经历生命周期后,最终会为系统所回收,会调用dealloc的方法,在每个对象的生命期内,此方法只执行一次,何时执行的不确定的,是当保留的计数器降为0的时候。

dealloc的主要工作是释放对象所拥有的引用,就是将oc的对象都释放掉。如果是CoreFoundation对象的,也要释放,其二是一些观测的对象。

可以简单用下面的代码表示。

-(void)dealloc{    CFRealeas(coreFoundationObject);    [[NSNotificationCenter defaultCenter] removeObserver:self];}

ARC 会自动调用super dealloc 曾经的一个面试题,笔者好像选错了。
注意点:①如果对象持有文件描述符等系统的资源:那么应该另外编写一个方法来释放此种资源。这样的类要和其他使用者约定:用完资源后必须调用close方法。
②执行异步任务的方法不应该在dealloc的方法里面调用。


以弱引用避免保留环:关键字unsafe_unretained 相当于weak。
weak 引用可以自动清空,也可以不自动清空,自动清空是随着ARC而引入的新特性,由运行期系统来实现,在具备自动清空功能的弱引用上,可以随意读取数据,因为这种引用不会指向已经回收过的对象。

未完待续Object-C内存管理二。






0 0
原创粉丝点击