Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSMutableArray';s对象在RemoveAllObject之后未调用dealloc方法_Objective C_Ios_Nsmutablearray_Automatic Ref Counting - Fatal编程技术网

Objective c NSMutableArray';s对象在RemoveAllObject之后未调用dealloc方法

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];

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

我在一个更大的ARC项目中工作时遇到了这个问题,并在这篇文章中找到了答案:。在阅读了这个答案之后,我觉得我理解了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...
}

非常感谢您的帮助。

在阅读了您的代码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");
}