由于内存警告,我一直在努力解决因发布的UIImageView中的图像问题。
这是我的情况:
1)我在.H:
中声明了一个UIImageViewIBOutlet 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
答案 0 :(得分:0)
您需要正确实施viewDidLoad
和viewDidUnload
来设置和发布您的观看次数。阅读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];