NSMutableArray的对象在removeAllObjects之后不调用dealloc方法

时间:2012-07-13 21:36:08

标签: objective-c ios nsmutablearray automatic-ref-counting

我正在尝试让dealloc方法在一些存储在可变数组中的项目上运行,但似乎无法找到实现它的方法。

我在一个更大的ARC项目中遇到了这个问题,并在这篇文章中找到了答案:dealloc method is not invoked when set an object to nil。在阅读完该答案之后,我觉得我理解ARC应该如何处理有问题的代码(下面),但是在一个非常简单的测试项目中运行之后,我会得到相同的结果。

在主视图控制器中,我初始化一个可变数组(一个强大的属性)并向其添加一些其他视图控制器。然后我删除所有对象:

- (void)viewDidLoad{
    [super viewDidLoad];

    containerArray = [[NSMutableArray alloc]init];
    for(int i = 0; i < 10; i++){

        //item +1 (item at +1)
        Item *item = [[Item alloc]initWithNibName:nil bundle:nil];

        //item +1 (item at +2)
        [containerArray addObject:item];

        //ARC should release item -1 (item at +1...I think)
    }

    //removeAllObjects should release each item -1 (item(s) at 0)
    [containerArray removeAllObjects];
    //dealloc should be called...
}

在项目视图控制器中:

-(void)dealloc{
    NSLog(@"item dealloc");
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

在阅读了3次代码之后,我看不出你方法中的任何缺陷。我认为一切都是正确的,当你从数组中删除所有对象时,应该调用dealloc 10次。

然后我决定尝试代码,我发现......我们都是对的:)代码是完美的。当我运行它时,我得到项dealloc 输出10次。

  • 您真的确定要在ARC项目中尝试吗?
  • dealloc类中的Item

还有一些其他事情你做得不对,但代码和参数是正确的。