3

所以如果我有:

SomeBlock myBlock = ^(){};
[self.mutableArray addObject: [myBlock copy] ];

以后如果我需要:

[self.mutableArray removeAllObjects];

那么我应该先遍历数组中的所有块并释放它们吗?

谢谢

编辑:

我没有使用 ARC,当我将一个块添加到数组时我在某处看到我需要复制它,这就是[block copy]我将它添加到数组时这样做的原因,因此我认为我应该在从数组中删除所有对象之前释放它们.

4

2 回答 2

4

我假设您没有使用 ARC(那时这个问题不会很有趣)。

在您的代码中,您确实需要发送release到所有块::虽然NSArray保留放入其中的对象,并在释放数组本身时释放对象,但您添加的对象已经具有保留计数1,因为copy方法为您提供了保留计数为 的对象1。这就是为什么在将块添加到数组之前需要遵循的原因copy,如下所示:autorelease

[self.mutableArray addObject: [[myBlock copy] autorelease]];
于 2013-02-28T03:04:41.580 回答
0

每当您获得任何对象的所有权时,您都有责任释放它,否则会发生内存泄漏。

如果您不释放指向该对象的指针,那将是泄漏。当你释放数组时,它会在它持有的所有对象上调用释放,因为它之前调用了保留。

对于 ARC,它将处于自动释放状态,因此您需要释放自己。

于 2013-02-28T02:56:43.173 回答