繁体   English   中英

自动释放池。 沥干并保留

[英]Autorelease pool. Drain and retain

我现在正在学习ARC。 我说的对吗,自动释放池中的对象只有在排空后才会删除,如果它们没有被保留?

摘自苹果文档链接

在引用计数环境中(与使用垃圾收集的环境相反), NSAutoreleasePool 对象包含已收到自动释放消息的对象,并且在耗尽时向这些对象中的每一个发送释放消息。 因此,向对象发送 autorelease 而不是 release 会延长该对象的生命周期,至少直到池本身被耗尽(如果对象随后被保留,它可能会更长) 一个对象可以多次放入同一个池中,在这种情况下,每次将其放入池中时它都会收到一条释放消息。

注意:在ARC中,不能显式调用retain、release、retainCount或autorelease。

是的,但是对于 ARC,您通常不再处理 autoreleasePools。 有时在大循环中,您可能会使用@autoreleasepool来允许释放对象,但在大多数情况下,只保留对所需对象的强引用和对需要引用但要防止保留循环的对象的弱引用。 ARC 会神奇地处理几乎所有其他事情。

自动释放池中的对象仅在排空后删除,如果不保留?

是的。 drain减少自动释放池中对象的保留计数。 如果这导致对象的保留计数下降到零,它会像往常一样被销毁(然后显然不再在池中,因为它不再存在)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM