iOS 内存管理基础知识

本文介绍了Objective-C中的内存管理原理,包括引用计数的概念及其增减操作。解释了alloc、copy、retain等方法如何增加引用计数,而release、autorelease则减少引用计数。并讨论了自动释放池的工作机制及容器类对引用计数的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存管理问题,首先要知道一个概念,引用计数。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对象。


转载于:https://my.oschina.net/u/2344008/blog/401672

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值