UITabBarController在内存警告后释放视图

时间:2010-11-18 16:58:49

标签: iphone objective-c memory-management uitabbarcontroller

我正在创建一个使用UITabBarController作为主要导航形式的应用程序,在我遇到一些问题之前从未这样做过。

在四个选项卡中的两个选项卡上,视图控制器使用标准导航控制器向下钻取并浏览类别,然后浏览项目,类别和项目具有相当多的图像。

使用我的应用程序几分钟后(直到使用4个320x460图像的滚动视图的项目阶段),我得到..

Received memory warning. Level=1

然后取消分配当前在我的UITabBarController中保存的所有视图,当我点击标签时,我只看到白色屏幕。

使用图片时,我正在尝试使用..

UIImageView *imageView = [[[UIImageView alloc] init] autorelease];
[imageView setImage:[UIImage imageNamed:@"image"]];
[self.view addSubview:imageView];

..尽可能,据我所知,这是'内存管理',并且应该正确地解除分配。

我认为内存问题仅仅是由于4个大图像被加载到内存中,这是我的应用程序的要求。标签的消失不是:/

任何想法/指导?

2 个答案:

答案 0 :(得分:3)

这是设计的。当您的应用收到内存警告时,当前不可见的所有视图控制器都将卸载其视图。你必须为此做好准备。当用户重新打开已卸载的选项卡时,视图控制器会重新加载视图并再次调用-viewDidLoad进行视图设置。

答案 1 :(得分:1)

Ole给出了一个不错的解释。但有一件事,如果您的屏幕外视图控制器的视图被卸载,您应该在-loadView中再次设置它。 调用此方法来设置视图层次结构,然后调用-viewDidLoad以表示视图已准备就绪。 如果你在-viewDidLoad中实现它,你将加载一个空视图(UIViewController -loadView),然后替换(使用你的-viewDidLoad代码),导致闪烁。

有关加载观点的更详细说明,请访问:http://myok12.wordpress.com/2010/11/30/custom-uiviewcontrollers-their-views-and-their-memory-management/