【发布时间】:2011-04-04 05:38:10
【问题描述】:
我的 iPhone 应用程序中有 RootViewController 和 DetailsViewController。我使用分配工具来监控我的内存消耗,我有一个问题。
当我的应用程序启动时它需要大约 4Mb 内存,当我在 RootViewController 中选择项目时,它会在 DetailsViewController 中加载 UIWebView 并且内存上升到 10Mb,在我返回 RootViewController 后内存保持在 10Mb 级别并且 DetailsViewController 有 retainCount = 2(即使我只创建一次)。
我应该如何释放这个内存?我知道如果我的应用程序收到内存警告我应该这样做,但我正在使用 initWithNibName: 创建这个 ViewController,所以我知道我不应该向它发送 release。
谢谢。
编辑
我是这样加载的:
if (self.detailsViewController == nil)
{
detailsViewController *d = [[detailsViewController alloc]
initWithNibName:@"DetailsViewController"
bundle:[NSBundle mainBundle]];
self.detailsViewController = d;
[d release];
self.detailsViewController.urlToLoad = urlToLoad;
}
[self.navigationController pushViewController: self.detailsViewController animated:YES];
【问题讨论】:
-
DetailsViewController 的 retainCount 应该为 1,因为它是一个新对象,你是如何加载这个 Nib 的?
-
如果 detailsViewController 属性被声明为retain(我认为是),那么你需要释放它,可能在dealloc中。
-
在下面查看我的答案。你应该在推动它后释放控制器。
-
是的,我在 dealloc 中释放它,但它不会在 RootViewController 处于活动状态时释放内存,我说的对吗?
-
好的,谢谢,我不知道这个,但是如果我在push后释放它而不设置为nil,return后retainCount = 1,但下次我点击任何项目时应用程序崩溃
标签: iphone uiviewcontroller memory-management