Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标c中的内存泄漏问题_Ios_Xcode_Memory_Memory Leaks_Nsdictionary - Fatal编程技术网

Ios 目标c中的内存泄漏问题

Ios 目标c中的内存泄漏问题,ios,xcode,memory,memory-leaks,nsdictionary,Ios,Xcode,Memory,Memory Leaks,Nsdictionary,我一直在和一个内存泄漏作斗争,好吧,比一个稍微多一点,它只是碰巧大部分都在同一个位置。我有一个问题,我使用一个类来存储代码所需的全局信息,因为它存储了用户添加到他们的膳食计划中的食物列表。我遇到的问题是,我使用的是一个相对较大的数据结构。数据结构是一个字典,其中包含其他五个字典的键,这些字典都有8个可变数组,这些数组的大小可以根据用户的意愿而定,因为它们可以添加他们心中想要的食物 我已经这样设置了结构 mealInfo = [[NSMutableDictionary alloc] init] [

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

我已经这样设置了结构

mealInfo = [[NSMutableDictionary alloc] init]
[mealInfo setObject:[NSMutableDictionary dictionary] forKey:"foo"];
[[mealInfo objectForKey:"such"] setObject: [NSMutableArray array] forKey:"bar"];
对于完整的数据结构,重复此操作。这似乎解决了我在xcode中分析时可能出现的一些内存泄漏问题。这个问题更进一步,因为我知道这个问题不是解决方案。我创建了对象,这些对象在我所在的.m文件的本地范围内创建了此结构。我将这个结构保存在创建mealInfo的类中,而不是本地范围,并使用该类的静态对象。(我没有使用太多的代码,因为它在很多位置都是一个,而两个是太多的行)

在我保存到类的静态变量I release the local scope之后,我不能释放mealInfo,因为当我过去这样做时,它实际上会导致对象消失,并且在初始化该对象的类中为零,从而使试图访问该信息的其他类无法访问它

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


我希望这不会太令人困惑。我也希望有人能找到解决这个内存泄漏的方法。感谢大家抽出时间阅读所有这些内容

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

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

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

这听起来像是一项核心数据的工作。您有这样的例子吗?我不确定该对象的真实情况。我在上面看到了维基。它与NSObject完全不同吗?我想我不知道该如何设置。我确实看到维基解释了我想要的东西,因为我想操纵和阅读,而不必担心内存部分,我们都知道这是一件很有趣的事情,代码出错:-)如果你还没有读过,请阅读并查看相关的示例。我会做对的。谢谢,当然可以。我知道它不能直接回答你的问题,但我认为它是实现你最终目标的更好的解决方案。如果你觉得这对你有用,就写下这样的评论。干杯。我不久前确实找到了一个解决办法,我想是这样的,但我忘了自己回答这个问题,所以谢谢你。