autorelease的使用场景

autorelease是ARC中用于延迟释放对象的技术,它确保了非alloc、copy、new方法返回的对象在适当时间释放。autorelease对象会在autoreleasepool drain时释放,通常发生在runloop结束时。这种方法允许对象在返回给调用者后还能存活一段时间,便于调用者处理。当函数返回一个对象并内部retain时,若不能立即release,可以使用autorelease。编译器可能会进行优化,如跳过不必要的autorelease和retain。alloc、copy、new等方法返回的对象则由调用者负责release,以提高内存效率。不是所有函数返回值都需要autorelease,例如get方法返回的属性不需要。
摘要由CSDN通过智能技术生成

一、 概述

     **autorelease 就是把 release 延后到 autorelease pool drain 的时候。**是 ARC 进行引用计数管理机制中的一部分,挺巧妙的。其它还有 weak 指针等都是为了管理好内存设计的机制。主要是可以用在非 alloc、copy、new等函数的返回值上面。可以对应解决的需求是这些函数内部 retain 了返回值,返回时不能 release,否则调用方再拿这个地址访问就会 BAD_ACCESS,也不能交给调用方去 release,因为没有约定,你一个普通函数的返回值,我也不知道你内部 retain了没有,该不该帮你 release 掉,所以就设计了这么一个 autorelease 机制,延后 release,先暂存起来,pool drain 的时候 relase。pool drain 要么是手动的 autorelease pool 作用域结束,要么是一个 runloop 结束。out parmater 也会 autorelase, 不要放到手动 autorelease pool 里面,防止被回收。主要作用是让对象多活着一段时间,然后穿透作用域边界等等。使用场景是,我 retain 了一个对象,我有职责 release 它,但是现在不能的情况。因为我知道后续代码可能想要 retain 它 。

    考虑这样一个场景,我们有个方法返回一个对象,在方法内部我们 retain 了这个对象,这意味这我们需要 release 这个对象,维持对象引用计数的平衡。但是因为这个对象是返回值,我们要确保调用方拿到的对象是没被回收的,在函数返回前 release 的话,我们就不能确保这一点。也就是说,我们需要 release 返回值,但又不能在函数返回前。这时候ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值