【发布时间】:2012-09-11 13:21:57
【问题描述】:
我正在为 iOS 开发一个应用程序,但遇到了内存不足警告的问题。
点击按钮后,我的应用正在加载一个包含大量子视图的大视图。内存使用量增长,这是可以理解的(从 30 Mb 到 80Mb)。然而,当用户选择另一个菜单项时——这个视图被释放了,但是!应用程序使用的内存量不会减少。我使用以下代码释放视图:
storeView.hidden = YES;
NSLog(@"%d", [storeView retainCount]);
[storeView removeFromSuperview];
storeView = nil;
第二行中的 NSLog 打印:1,因此在发布后它应该被释放。我的 -(void) dealloc 的实现;确实被调用了(我在它的最后一行调用了 [super dealloc]; )。然而在那之后我仍然有内存不足的警告。
仪器只发现了几个泄漏的 NSString,这不可能导致内存警告。
您能给点建议吗?
【问题讨论】:
-
忘记retainCount属性,永远不要使用它
-
这很有帮助,谢谢。还有什么建议吗?该对象确实被释放 - 它的 dealloc 方法被调用。然而内存并没有被释放。
-
内存不是由视图本身消耗的,而是由视图所持有的对象消耗的。当您的
dealloc被调用时,请查看您是否正在释放视图引用的对象。使用内存分析器运行,看看内存去了哪里。 -
请注意,
retainCount根据定义,永远不会返回 0。
标签: objective-c ios memory-management uikit