Objective c NSMutableArray';s对象在RemoveAllObject之后未调用dealloc方法
我试图让dealloc方法在存储在可变数组中的某些项上运行,但似乎找不到实现它的方法 我在一个更大的ARC项目中工作时遇到了这个问题,并在这篇文章中找到了答案:。在阅读了这个答案之后,我觉得我理解了ARC应该如何处理有问题的代码(见下文),但是在一个非常简单的测试项目中运行它之后,我得到了相同的结果 在主视图控制器中,我初始化一个可变数组(一个强属性),并向其中添加一些其他视图控制器。然后删除所有对象:Objective c NSMutableArray';s对象在RemoveAllObject之后未调用dealloc方法,objective-c,ios,nsmutablearray,automatic-ref-counting,Objective C,Ios,Nsmutablearray,Automatic Ref Counting,我试图让dealloc方法在存储在可变数组中的某些项上运行,但似乎找不到实现它的方法 我在一个更大的ARC项目中工作时遇到了这个问题,并在这篇文章中找到了答案:。在阅读了这个答案之后,我觉得我理解了ARC应该如何处理有问题的代码(见下文),但是在一个非常简单的测试项目中运行它之后,我得到了相同的结果 在主视图控制器中,我初始化一个可变数组(一个强属性),并向其中添加一些其他视图控制器。然后删除所有对象: - (void)viewDidLoad{ [super viewDidLoad];
- (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...
}
非常感谢您的帮助。在阅读了您的代码3次之后,我看不出您的方法有任何缺陷。我认为一切都是对的,当你从数组中移除所有对象时,
dealloc
应该被调用10次
然后我决定尝试代码,我发现。。。。我们都是对的:)代码是完美的。当我运行它时,我会得到10次项目dealloc输出
- 你真的确定你正在一个
项目中尝试它吗ARC
是否在dealloc
类中项
还有一些事情你做得不对,但是代码和参数是正确的。谢谢你的回复。我在一个小的ARC项目中运行它,dealoc方法在Item类中。所讨论的代码是添加到默认项目中的唯一代码(在添加主视图和项目视图控制器类之后)。我使用的是在iOS5.0模拟器上运行的Xcode 4.2。我不知道这在这里是否重要。考虑到它对您运行的正确性,我将再次尝试,看看是否还有其他明显的遗漏。另外,如果你不介意的话,还有哪些事情我做得不对(我仍然在学习如何使用obj-c和ios)。我的意思是它必须是其他东西,但我现在想不出任何东西。我唯一能做的就是在我尝试代码的地方分享这个项目。下载zip文件,看看它是否有效:您的项目也在为我正确运行。谢谢你,我只需要看看你的和我的,看看我做了什么不同。当我找到它时,我会再次评论。再次感谢。显然在我的匆忙中,我的简单项目没有为窗口添加根视图控制器。一旦我这么做了,所有的项目都在调用dealloc。现在的问题(如果我无法解决,可能还需要另一个问题)出现在我的大型项目中,在循环中以任何方式修改项目都会阻止dealloc。不过,只需创建、添加和删除它就可以了。在简单项目中修改对象效果很好…发现了我真正的问题。我的item类将自己添加为另一个自定义类的委托。该委托属性被错误地设置为strong,因此一旦创建了该项,另一个类就会保留它。
-(void)dealloc{
NSLog(@"item dealloc");
}