gpt4 book ai didi

objective-c - iOS - ModalViewControllers 的 ARC/内存管理问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:03 25 4
gpt4 key购买 nike

我正在编写一个应用程序(在 iOS 5 中使用 ARC!),它在自定义 UIViewController 中显示数百个对象我写过用户可以滚动并选择,每个对象都是显示为用户可以触摸的缩略图。

这些对象中的每一个都与一个特殊的 UIViewController 子类相关联,该子类处理与该对象相关联的信息的自定义表示。例如,它可能是可以缩放和平移的图像,或者只是一些需要格式化的文本。

现在,我的每个图像对象都有一个与之关联的大图像。使用 Instruments 应用程序分析我的代码并运行 Activity Monitor,我发现当加载自定义 UIViewController 子类并显示图像时,它们每个大约占用 5-10MB。这对于一些图像来说没问题,但最终我的应用程序占用了太多内存并崩溃了。

我已经在我的子类的 -viewDidUnload 方法中编写了显然所有必要的东西来告诉 ARC 释放这个内存,但是在发出警告之前没有内存被释放,这通常发生在应用程序即将崩溃。有几次,我注意到如果我足够接近阈值但没有超过它,我之前查看过的 UIViewController 子类最终会从内存中清除,尽管-viewDidUnload 方法显然没有被调用(相反,-didReceiveMemoryWarning 消息被发送到我的自定义 UIViewControllers)。但是,大多数情况下,我的应用程序会因内存不足而崩溃。

所以我的核心问题是,我应该假设一个对象会被 ARC 尽快处理掉,还是它总是等到空间变紧?我想要的行为是让自定义 View Controller 及其数据立即刷新,这样内存永远不会成为问题。

我不相信对象对我的自定义 View Controller 有任何强引用,我使用以下代码在我的主视图 Controller 中实例化它们:

[self presentViewController:[cObj grabModalViewController]
animated:YES completion:nil];

其中 cObj 是带有对象信息的自定义类。 grabModalViewController 简单地实例化一个正确类型的对象并返回指针,因此大概该方法完成后该对象的本地引用应该被丢弃。

因此,我预计,当我稍后打电话时

[self dismissModalViewControllerAnimated:YES];

仅通过 presentedViewController 指向主视图 Controller 的自定义 View Controller 应该从内存中清除,但这并没有发生。

这可能是因为我的自定义 View Controller 对象中有强引用吗?

本质上,我想要完成的是通过更好地预先管理事物来尽可能避免出现更多的内存警告,但也许这不是正确的态度。

如果有任何建议,我将不胜感激,我很乐意发布任何有用的代码。

最佳答案

So my core question is, should I assume that an object will be disposed of by ARC as soon as possible, or does it always wait until space becomes tight?

ARC 是一种编译时技术。它对您的运行时内存堆一无所知。因此,它不能等到空间变紧才释放元素。对您的问题的具体回答是,ARC 将在您不再需要时立即发布任何内容。

关于objective-c - iOS - ModalViewControllers 的 ARC/内存管理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8790705/

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