目标c中的内存泄漏问题

时间:2012-07-09 13:41:07

标签: ios xcode memory memory-leaks nsdictionary

我一直在与内存泄漏作斗争,好一点,然后它恰好发生在同一个位置。我有这个问题,我使用一个类来存储整个代码所需的全局信息,因为它存储了用户添加到他们的膳食计划中的食物列表。我遇到的问题是,我使用的是一个相对较大的数据结构。数据结构是一个字典,其中包含五个其他字典的键,这些字典都有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,但是试图通过使它成为可以调用的对象来更容易访问它来自其他课程,并在那些课程中发生变化,有时会变得有点复杂和混乱。这是我试图避免的。如果这是唯一的解决方案,我会这样做,但希望首先使用此方法。

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

1 个答案:

答案 0 :(得分:1)

理解你的问题有点难......但如果mealInfo本身就是你的静态类变量,那么你可以通过以下方式分配一次 - 只需一次 - 。

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

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