我遇到记忆问题我无法理顺。我在做的是:
我有一个viewcontroller看起来类似于一本有7个不同标签的书。每次用户按下选项卡时,“页面”上的内容都会更改,并且背景图像会更改以反映所选的不同选项卡。每个背景图像为768x1024,7个选项卡中的每一个都有一个。
我的问题是,当选择每个标签时,永远不会释放前一个图像的内存,并且在选择了7个标签后,我有大约30个用于7个不同图像的内容。对于用户按下的7个选项卡,我有7种不同的方法。
-(IBAction) pressedTab1 {
self.tabsImageView.image = nil; //tabsImageView is the imageView I am keeping he background image in.
UIImage *tempUIImage = [UIImage imageNamed:@"tab1selected.png"];
self.tabsImageView.image = tempUIImage;
}
答案 0 :(得分:1)
您可以像这样直接分配图像。因为[UIImage imageNamed ...]是自动释放,所以将为你处理内存。
-(IBAction) pressedTab1 {
self.tabsImageView.image = [UIImage imageNamed:@"tab1selected.png"];
}
答案 1 :(得分:1)
您发布的代码中没有泄漏。当您点击所有7个标签时,您的应用程序将达到30MB内存。但是如果继续在标签之间切换会发生什么?每个开关都会继续增加吗?如果是,那么你肯定会在其他部分泄漏。如果不是(即内存大约30MB恒定),那么这可能根本不是问题。有时系统不会释放东西,直到需要内存并且30MB是可接受的。它还可以缓存图像数据。在这种情况下你不必担心。虽然我没有发现Apple文档说明这个功能,但我遇到了类似的情况。
除了你原来的问题,有一点是你应该真的避免这么大的图像(768x1024像素)。这可能会导致巨大的问题,至少在低端设备中如此。