自动释放池。排水并保留

时间:2016-05-08 16:33:37

标签: ios automatic-ref-counting

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

3 个答案:

答案 0 :(得分:0)

摘自Apple文档link

  

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

注意:在ARC中,无法显式调用retain,release,retainCount或autorelease。

答案 1 :(得分:0)

是的,但是使用ARC,您通常不再处理autoreleasePools。有时在一个大循环中你可以使用@autoreleasepool来释放对象,但是大多数情况下只保留对你想要的对象的强引用,以及对需要引用但希望阻止保留循环的对象的弱引用。 ARC将神奇地处理几乎所有其他事情。

答案 2 :(得分:0)

  自动释放池中的

对象只在排除后删除,如果没有保留?

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