我想知道如果正确处理删除的对象,何时使用数组中的removeObject删除对象。被删除的对象会被释放吗?
答案 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];