【发布时间】:2012-12-06 16:16:36
【问题描述】:
我开发了一个应用程序,现在我正在使用 Instruments 来查看内存使用情况。我在理解对象的保留/释放过程时遇到问题。 Instruments 是这么说的:
当我将对象添加到数组中、将其添加到视图中以及从数组中取出时,保留计数会增加。
所以,当我使用removeFromSuperview 时,对象retainCount 永远不会为零,所以对象不会释放内存。
编辑 1: 我忘了说我正在使用 ARC。
编辑 2:
我准确地描述了发生的事情:
我在一个名为NKLevelGenerator 的类中将对象与其他对象一起创建。我将NKIngredients 分配到其中,然后将所有内容添加到将返回的NSArray。这里每个对象的保留计数是 2。在我的NKLevelVC,我的ViewController,我使用这个指令:
[level addObjectsFromArray:[levelGenerator level1WithDelegate:self ciotola:ciotola bagliore:bagliore difficulty:NKDifficultyHard]];
对象level 是NSMutableArray,我在viewDidLoad 中alloc 和init。
从这里我调用另一个执行此操作的方法:
- (void)insertInArrayRandomly {
for (int i=0; i<[level count]; i++) {
[ingredienti insertObject:[level objectAtIndex:[[indexes objectAtIndex:i]integerValue]] atIndex:i];
}
}
对象ingredienti 是我在viewDidLoad 中的alloc 和init 中的另一个NSMutableArray。 indexes 是 NSInteger 的数组,其中包含随机索引以随机提取 NKIngredient 对象。
然后我这样做:
NKIngredient *ing = [ingredienti objectAtIndex:index];
[[self view] insertSubview:ing belowSubview:navBar];
[ing animateIngredient];
[ingredienti removeObject:ing];
【问题讨论】:
标签: ios memory memory-management instruments