ARC和内存管理

时间:2013-02-02 12:29:59

标签: objective-c automatic-ref-counting

对于ARC内部人员,我仍然不是100%。

我想澄清一些例子:

在方法中分配并返回的someObjectToReturn = [[SomeClass alloc] init];会发生什么?如果将someObjectToReturn分配给例如{{1}} someObject,someObjectToReturn何时会被释放?当someObject被填充或者someObjectToReturn是否还需要添加到自动释放池中时?

另一种情况是,如果一个对象数组被填充,是否所有对象都被释放了?

最后,哪里有一个释放复制的块对象的好地方?或者块会在执行后仍然被释放吗?如果将复制的块添加到自动释放池中,何时会将该池耗尽? 假设有10个块,每个块都添加到自动释放池中,过早耗尽会导致执行块死亡。复制块是否可以从内部填充,例如将块的nilling分配回主线程?

1 个答案:

答案 0 :(得分:1)

你似乎过于复杂。在ARC下,你无法释放对象,或者排出自动释放池,因此没有“正确”的时间来执行此操作。不要考虑保留和释放以及自动释放(紧密循环除外),考虑对象所有权。

您的具体问题:

  1. 当指定返回值的变量超出范围或设置为nil时,将释放该对象。你不必担心它。

  2. 是的,当数组设置为nil时,数组的所有内容都会被释放,你不必担心它

  3. 完成后,您可以将保存复制块的值设置为nil,或者当拥有复制块的对象进入时,它将消失。您无法在ARC下排空自动释放池,您可以将语句包装在@autoreleasepool{}块中,但这只会捕获块中的所有内容 - 您不会向池中“添加”内容或“消耗”池中的内容。

相关问题