objective-c – NSMutableArray的对象在removeAllObjects之后不
发布时间:2020-12-16 07:31:31 所属栏目:百科 来源:网络整理
导读:我试图让dealloc方法在一些存储在可变数组中的项目上运行,但似乎无法找到实现它的方法. 我在一个更大的ARC项目工作时遇到了这个问题并在这篇文章中找到了答案:dealloc method is not invoked when set an object to nil.在阅读了这个答案后,我觉得我理解ARC
我试图让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... } 在Item视图控制器中: -(void)dealloc{ NSLog(@"item dealloc"); } 任何帮助是极大的赞赏. 解决方法
在阅读了3次代码之后,我看不出你的方法有任何缺陷.我认为一切都是正确的,当你从数组中删除所有对象时,应该调用dealloc 10次.
然后我决定尝试代码,我刚刚发现……我们都是对的:)代码是完美的.当我运行它时,我得到项目dealloc输出10次. >你真的确定你在ARC项目中尝试过吗? 还有一些其他事情你做得不对,但代码和参数都是正确的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |