我正在创建一个使用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个大图像被加载到内存中,这是我的应用程序的要求。标签的消失不是:/
任何想法/指导?
答案 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/