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

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

  1. NSMutableArray 实际包含什么 - 对象的副本或只是指向它们的指针?
  2. 使用 NSMutableArray 的顺序是什么? (分配、初始化、工作、释放)
  3. 如何正确的保留和释放?

    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 对象?

谢谢!

【问题讨论】:

    标签: iphone objective-c ios4 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]; 被调用时,所有对象都会收到一条释放消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多