removeObject是否释放对象的NSMutableArray中的对象?

时间:2009-11-03 17:10:20

标签: iphone objective-c cocoa-touch

我想知道如果正确处理删除的对象,何时使用数组中的removeObject删除对象。被删除的对象会被释放吗?

4 个答案:

答案 0 :(得分:14)

NSMutableArray将发布它。如果这是最后一次保留,它将被取消分配。来自文档:

  

与NSArray一样,NSMutableArray的实例保持对其内容的强引用。如果您不使用垃圾收集 [ Jed: iPhone不会] ,则在向数组添加对象时,该对象会收到一条保留消息。从可变数组中删除对象时,它会收到一条释放消息。如果没有对该对象的进一步引用,则表示该对象已被释放。如果您的程序保留对此类对象的引用,则引用将变为无效,除非您在将对象从数组中删除之前向该对象发送保留消息。

请参阅NSMutableArray documentation。事实上,他们的例子是removeObjectAtIndex:

id anObject = [[anArray objectAtIndex:0] retain];
[anArray removeObjectAtIndex:0];
[anObject someMessage];

答案 1 :(得分:5)

是。集合保留了在将值添加到集合时收集的值,这意味着值将在从集合中删除时释放。

答案 2 :(得分:3)

是的,当从NSMutableArray中删除对象时,它将被释放。如果其保留计数为0,则将其解除分配(或者如果您在启用了GC的OS X上运行,则会进行垃圾回收)。

答案 3 :(得分:0)

正如大家所说的那样,NSMutableArray的对象在从数组中删除后会被释放。

如果您不想释放该对象,请在调用remove object方法之前保留它。在这种情况下,您有责任稍后将其发布:

MyClass *objectToBeRemoved=[myArray objectAtIndex:indexPath.row];
[objectToBeRemoved retain];
[myArray removeObject:objectToBeRemoved];