ddo*_*dev 3 memory-management objective-c uiviewcontroller ios automatic-ref-counting
我正在编写一个应用程序(在iOS 5中使用ARC!),它在UIViewController我编写的自定义内呈现了数百个对象,用户可以滚动并选择,每个对象都显示为用户可能触摸的缩略图.
这些对象中的每一个都与一个特殊的UIViewController子类相关联,该子类处理与该对象相关的信息的自定义表示.例如,它可能是可以缩放和平移的图像,或者只是某些需要格式化的文本.
现在,我的每个图像对象都有一个与之关联的大图像.使用Instruments应用程序来分析我的代码并运行Activity Monitor,我发现当自定义UIViewController子类加载并显示图像时,每个大约需要5-10MB .这适用于一些图像,但最终我的应用程序占用了太多的内存和崩溃.
我已经在我的子类的-viewDidUnload方法中写了显然所有必要的东西来告诉ARC释放这个内存,但是在发出警告之前没有释放内存,这通常发生在应用即将崩溃时.有几次,我注意到如果我足够接近阈值但是没有超过它,UIViewController我之前看过的子类最终会从内存中刷新,尽管这个-viewDidUnload方法显然没有被调用(相反,该-didReceiveMemoryWarning消息被发送到我的自定义UIViewControllers).但是,大多数情况下,我的应用程序因内存不足而崩溃.
所以我的核心问题是,我应该假设一个物体将尽快被ARC处理掉,还是一直等到太空变紧?我想要的行为是自定义视图控制器及其数据立即刷新,以便内存永远不会成为问题.
我不相信从对象到我的自定义视图控制器有任何强引用,我使用以下代码在我的主视图控制器中实例化它们:
[self presentViewController:[cObj grabModalViewController]
animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
哪个cObj是包含对象信息的自定义类. grabModalViewController简单地实例化一个正确类型的对象并返回指针,因此一旦方法完成,大概应该对该对象的本地引用进行删除.
结果,当我后来打电话的时候,我希望如此
[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
presentedViewController应该从内存中刷新仅指向主视图控制器的自定义视图控制器,但这不会发生.
这可能是因为我在自定义视图控制器对象中有强引用吗?
基本上我想要完成的是通过提前更好地管理事物来避免尽可能多的内存警告,但也许这不是正确的态度.
我很感激任何建议,我很乐意发布任何有用的代码.
所以我的核心问题是,我应该假设一个物体将尽快被ARC处理掉,还是一直等到太空变紧?
ARC是一种编译时技术.它对运行时内存堆一无所知.因此,在空间变得紧张之前,它不能等待释放物品.对您的问题的具体答案是,ARC将在您不再需要时立即发布任何内容.
| 归档时间: |
|
| 查看次数: |
1828 次 |
| 最近记录: |