gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 05:57:12 24 4
gpt4 key购买 nike

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

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

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

- (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...
}

在项目 View Controller 中:

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

非常感谢任何帮助。

最佳答案

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

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

  • 你真的确定你正在 ARC 项目中尝试它吗?
  • dealloc 是否在 Item 类中?

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

关于objective-c - NSMutableArray 的对象在 removeAllObjects 之后不调用 dealloc 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11478715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com