NSMutableArray 如何正确添加对象并释放

Posted

技术标签:

【中文标题】NSMutableArray 如何正确添加对象并释放【英文标题】:NSMutableArray how to properly addObjects and release 【发布时间】:2010-10-27 14:37:51 【问题描述】:

我担心的是我是否正确添加对象并释放它们。

    NSMutableArray 实际包含什么 - 对象的副本或只是指向它们的指针? 使用 NSMutableArray 的顺序是什么? (分配、初始化、工作、释放)

    如何正确的保留和释放?

    NSMutableArray *listData = [[NSMutableArray alloc] init];
    int i = 0;
    for (i = 0; i < 3; i++)
    
        MyData *obj = [[MyData alloc] init];
        NSString *name = nil;
        switch (i)
        
            case 0:
                name = @"Semen";
                break;
            case 1:
                name = @"Ivan";
                break;              
            case 2:
                name = @"Stepan";
                break;              
            default:
                break;
               
        obj.name = name;
        [listData addObject: obj];
        [obj release];
     
     [listData release]  //in dealloc method
    

或者我需要先释放所有包含的对象,然后才释放 NSMutableArray 对象?

谢谢!

【问题讨论】:

【参考方案1】:

NSMutable 数组包含对对象的引用。当您将对象添加到 NSMutableArray 时,它将保留该对象。也就是说,在将对象添加到数组后,您应该释放它。当您在数组中处理完该对象后,您可以从数组中删除该对象。移除后,对象会自动收到释放消息。因此,您无需向其发送另一条发布消息。如果您释放数组本身,则无需向所有对象发送释放消息,因为在 NSMutableArray 的释放期间,它将向其包含的所有对象发送释放。

1. 分配 NSMutableArray。 2.分配对象1。 3.将object1添加到数组中。 4.释放对象1。 5.分配对象2。 6.将object2添加到数组中。 7.释放对象2。 8. 以这种方式添加尽可能多的对象。 8. 使用object1。 9. 从数组中删除 object1。它将自动收到释放。 10. 释放阵列。 object2 和其他人将收到释放。

希望对你有帮助。

【讨论】:

其实如果用这个方法移除所有对象[array removeAllObjects];所有对象都会自动释放? @badben,是的,当[array removeAllObjects]; 被调用时,所有对象都会收到一条释放消息。

以上是关于NSMutableArray 如何正确添加对象并释放的主要内容,如果未能解决你的问题,请参考以下文章

无法将对象从块添加到 NSMutableArray

在 NSMutableArray 的特定索引处添加对象

如何在Objective C中将对象添加到NSMutableArray?

如何将 NSArray 中的对象添加到 NSMutableArray 的末尾?

如何将json数据中的对象添加到nsmutablearray?

如何在Objective-C中将二维整数数组对象添加到NSMutableArray?