gpt4 book ai didi

iOS - 内存和保留/释放问题

转载 作者:行者123 更新时间:2023-11-29 13:22:51 25 4
gpt4 key购买 nike

我开发了一个应用程序,现在我正在使用 Instruments 查看内存使用情况。我在理解对象的保留/释放过程时遇到问题。这是 Instruments 所说的:

当我将我的对象添加到数组中时,当我将它添加到我的 View 中时以及当我从数组中取出时,保留计数都会增加。因此,当我使用 removeFromSuperview 时,对象 retainCount 永远不会为零,因此该对象不会释放内存。

编辑 1:我忘了说我正在使用 ARC。

编辑 2:我准确描述了发生的事情:我在名为 NKLevelGenerator 的类中创建了与其他对象一起的对象。我在其中分配了 NKIngredient,然后将所有内容添加到将返回的 NSArray 中。这里每个对象的保留计数为 2。在我的 NKLevelVCViewController 中,我使用了这条指令:

[level addObjectsFromArray:[levelGenerator level1WithDelegate:self ciotola:ciotola bagliore:bagliore difficulty:NKDifficultyHard]];

对象 level 是一个 NSMutableArray,我在 viewDidLoadallocinit .从这里我调用另一个执行此操作的方法:

- (void)insertInArrayRandomly {
for (int i=0; i<[level count]; i++) {
[ingredienti insertObject:[level objectAtIndex:[[indexes objectAtIndex:i]integerValue]] atIndex:i];
}
}

对象 ingredienti 是我在 viewDidLoadallocinit 的另一个 NSMutableArray . indexes 是一个 NSInteger 数组,其中包含随机索引以随机提取 NKIngredient 对象。然后我这样做:

NKIngredient *ing = [ingredienti objectAtIndex:index];
[[self view] insertSubview:ing belowSubview:navBar];
[ing animateIngredient];
[ingredienti removeObject:ing];

最佳答案

在研究 Instruments 之前,您是否尝试过对代码进行静态分析?它可能有助于解决简单的内存问题。

但首先要检查的是:您是否遵循了黄金法则

黄金法则是:对于每个 alloccopyretain,您必须使用一个,并且只能使用一个,releaseautorelease

这是没有ARC的内存管理最重要的规则。因此,您的对象被数组保留这一事实与您无关,只需记住您保留、分配或复制的内容并释放它即可。

PS:下次,您的代码会比 Instruments 屏幕截图更有帮助。

关于iOS - 内存和保留/释放问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950233/

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