码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 内存管理基础知识

时间:2015-04-15 11:40:16      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

内存管理问题,首先要知道一个概念,引用计数。Objective-C 的内存管理基于引用计数(Reference Count)。如果要使用一个对象,并希望确保在使用期间对象不被释放,需要保证在使用过程中引用计数>0,在使用过后,把引用计数-1。当引用计数==0时,就会调用销毁方法了。

           那么我们非常有必要知道,哪些操作会使用引用技术+1,哪些会-1。OK,下面是一个列表:

        +1操作

        alloc - 创建对象是调用alloc,为对象分配内存,对象引用计数加一。、

        copy - 拷贝一个对象,返回新对象,引用计数加一。

        retain - 引用计数加一,获得对象的所有权。

        -1操作

        release - 引用计数减一,释放所有权。如果引用计数减到零,对象会被释放。

        autorelease - 在未来某个时机释放。

  

     autorelease是一个特别的方法,实际上是把release这件事交给了一个叫做自动释放池(autorelease pool)的东西,在系统觉得需要清理的时候,才会调用release方法。由于交由系统来处理,所以可能release的时刻并不是那么及时,所以在一些必要的时候,我们还是需要自己手动去release.

       此外还需要注意的一个地方,就是容器。NSArray,NSDictionary这些类,在添加对象的时候,会自动的把对象的引用计数+1,在自身销毁的时候,又会把这些对象的引用计数-1.同理UIView对自己的subview也是这个样子。

        内存管理,我们需要遵循一些基本原则:

        1.保证只有带alloc,copy,retain的函数才会让引用计数+1.

        2.在对象的dealloc函数中释放对象所拥有的实例变量。

        3.永远不要直接调用dealloc来释放对象,完全依赖引用计数来完成对象的释放。

        4.在很多类方法可以直接创建autorelease对象。

        5.在把一个参数传递出去的时候,因为要交由别人来释放,一般设置成autorelease对象。


iOS 内存管理基础知识

标签:

原文地址:http://my.oschina.net/u/2344008/blog/401672

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!