gpt4 book ai didi

ios - 全局变量神秘丢失内存?

转载 作者:行者123 更新时间:2023-11-28 19:24:27 24 4
gpt4 key购买 nike

在我的代码中,我创建了一个名为 Events 的全局变量(在 .h 文件中没有对应项)。这是一个 NSMutableArray。它只能由定义它的类访问。

当“viewDidLoad”被调用时,我的代码做了很多事情:首先,它初始化事件。然后,它创建 7 个 NSMutableArrays,并将它们添加到 Events 对象。

viewDIdLoad 继续做一些 UI 设置,通过创建按钮分配并确保将它们放入另一个 NSMutable 数组中进行跟踪。

在 viewDidLoad 完成执行之前,Events 对象工作正常且花花公子。如果我按下其中一个生成的按钮,而该按钮试图访问事件,系统就会崩溃。

我进行了大量的调试,试图找出问题所在,并将其缩小为:

我的代码完成一段时间后,事件被完全删除。我跟踪它直到我的函数结束,到最后,它仍然有所有七个 NSMutableArrays。

一旦它到达我的函数的末尾,我点击继续按钮,并在生成的按钮重新访问 Events var 的地方之前放置一个断点。在那个位置,Events 完全是空的。

现在,为了简单起见,我没有执行任何自动释放或保留命令。在 viewDidLoad 调用的几种方法之一中定义的变量有一个释放命令。

谁能告诉我如何阻止事件被卸载?谢谢 :)

最佳答案

听起来你正在做类似 Events = [NSMutableArray array]; 的事情。这会创建一个 NSMutableArray 的自动释放实例,它将在您的函数返回后的某个时间自动处理。

相反,您需要执行 Events = [[NSMutableArray alloc] init]; 来创建一个未自动释放的实例,或者 Events = [[NSMutableArray array] retain]; 保留自动释放的实例。无论哪种方式,系统都会知道您仍在使用该对象,因此不会丢弃它。

关于ios - 全局变量神秘丢失内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5129305/

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