0

我一直在与内存泄漏作斗争,比它多一点,它恰好大部分都在同一个位置。我有这个问题,我正在使用一个类来存储代码中所需的全局信息,因为它存储了用户添加到他们的膳食计划中的食物列表。我遇到的问题是,它是我正在使用的一个相对较大的数据结构。数据结构是一个字典,其中包含其他五个字典的键,这些字典都有 8 个可变数组,这些数组可以根据用户的意愿添加,因为可以添加任意多的食物。

我已经设置了这样的结构

mealInfo = [[NSMutableDictionary alloc] init]
[mealInfo setObject:[NSMutableDictionary dictionary] forKey:"foo"];
[[mealInfo objectForKey:"such"] setObject: [NSMutableArray array] forKey:"bar"];

对完整的数据结构重复此操作。当我在 xcode 中进行分析时,这似乎确实解决了我的一些可能的内存泄漏问题。问题更进一步,因为我知道问题不是解决方案。我创建了对象,它在我所在的 .m 文件的本地范围内创建了这个结构。我将这个结构保存在创建 mealInfo 的类中,而不是本地范围内,并使用该类的静态对象。(我没有使用太多代码,因为它是很多位置中的一个,而两个是太多行

在我保存到类的静态变量后,我释放了本地范围,我无法释放 mealInfo,因为当我过去这样做时,它实际上导致对象消失并且在它被初始化的类中为零其他试图访问此信息的类无法访问。

我想到的一个解决方案是让所有的保存和存储都发生在初始化它的类中,并且只使用 getter 和 setter,但试图通过使其成为可以从其他类调用的对象来使其更容易访问并在那些有时变得更加复杂和混乱的类中发生了变化。这是我试图避免的。如果这是唯一的解决方案,我会这样做,但希望首先让这种方法起作用。

我希望这不会太混乱。我也希望有人可以解决这个内存泄漏。谢谢大家至少花时间阅读所有这些。

4

1 回答 1

1

有点难以理解你的问题......但如果mealInfo它本身是你的静态类变量,那么你可以通过执行以下操作来分配它一次 - 并且只分配一次。

if (!mealInfo)
    mealInfo = [[NSMutableDictionary alloc] init];

否则每次分配时都必须释放它,否则会泄漏。

于 2012-11-06T02:56:34.110 回答