iOS UIImageView内存问题

时间:2011-03-31 21:11:38

标签: iphone memory sdk uiimageview

由于内存警告,我一直在努力解决因发布的UIImageView中的图像问题。

这是我的情况:

1)我在.H:

中声明了一个UIImageView
IBOutlet UIImageView *fightStyleImage;
...
@property (nonatomic, retain) UIImageView *fightStyleImage;

2)我在我的.M中合成和解除了:

@synthesize fightStyleImage;
...
...
-(void)dealloc{
[fightStyleImage release];
...
}

3)我将fightStyleImage附加到Interface Builder中的UIImageView。

4)我应用程序的部分体验允许用户在设备上滑动,循环浏览5个不同的图像。我使用以下代码来实现:

// Load next image
UIImage *theImg = [UIImage imageNamed:@"fighter1.png"];
fightStyleImage.image = theImg;

一切都运作良好,我对表现,经验等感到满意。

但是,当我弹出到另一个视图控制器(或MFMailComposeViewController或地址簿选择器)并且我的设备收到内存警告(通过模拟器或设备)时,当我返回到我的原始视图控制器:iOS似乎放弃了我的UIImageView图像(我假设因为它是内存中最昂贵的对象),而且我留下了黑屏(即没有图像)。如果我再次开始滑动,图像将返回并继续正常循环。

我很想听到有关此问题的任何想法,并提前感谢任何人可能拥有的任何解决方案/见解。特别是,我感兴趣(当然!)恢复我从记忆中被抛弃的图像。

-SD

2 个答案:

答案 0 :(得分:0)

您需要正确实施viewDidLoadviewDidUnload来设置和发布您的观看次数。阅读Memory Management Programming Guide的iOS部分以获取帮助。我还建议您将IBOutlet声明从ivar移至属性

UIImageView *fightStyleImage;
...
@property (nonatomic, retain) IBOutlet UIImageView *fightStyleImage;

答案 1 :(得分:0)

问题可能是由于使用 imageNamed: 方法,因为它将图像缓存到您的内存中,并且只有在发生低内存警告时才会被强制释放。最好这样:

UIImage *image=[[[UIImage alloc]initWithContentsOfFile:imagePath]autorelease];