4

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

我在一个更大的 ARC 项目中工作时遇到了这个问题,并在这篇文章中找到了答案:将对象设置为 nil 时不会调用 dealloc 方法。在阅读了那个答案之后,我觉得我理解了 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");
}

任何帮助是极大的赞赏。

4

1 回答 1

2

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

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

  • 你真的确定你正在一个ARC项目中尝试它吗?
  • dealloc里面的Item类吗?

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

于 2012-07-13T22:53:02.393 回答