Iphone iOS UIImageView内存问题

Iphone iOS UIImageView内存问题,iphone,memory,sdk,uiimageview,Iphone,Memory,Sdk,Uiimageview,我一直在试图解决一个问题,因为UIImageView中的图像由于内存警告而被释放 我的情况如下: 1) 我在my.H中声明UIImageView: IBOutlet UIImageView *fightStyleImage; ... @property (nonatomic, retain) UIImageView *fightStyleImage; 2) 我在我的.M中合成并释放: @synthesize fightStyleImage; ... ... -(void)dealloc{ [f

我一直在试图解决一个问题,因为UIImageView中的图像由于内存警告而被释放

我的情况如下:

1) 我在my.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

您需要正确实现
viewDidLoad
viewDidUnload
来设置和发布视图。请阅读的iOS部分以获得帮助。我还建议您将IBOutlet声明从ivar移动到属性,以便

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

问题可能是由于使用了
imageNamed:
方法,因为它将图像缓存到内存中,并且只有在出现内存不足警告时才会强制释放。最好这样做:

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

感谢您的快速响应。我按照您的建议将我的IBOutlet声明移动到了属性中,并阅读了您提供的MMPG链接。我将self.fightStyleImage=nil添加到了我的viewDidUnload方法中,但不确定如何在viewDidLoad中实现。从nib加载时,属性将已经正确设置,因此您实际上不需要o除了额外的定制之外,什么都可以做。Joe-在您最初的回答中,您提到在设置/发布[my]时实现viewDidLoad和viewDidUnload视图。当您说“设置/释放您的视图”时,您能具体说明哪些对象吗?谢谢。当调用
viewDidLoad
时,您的所有
IBOutlet
s都已连接。如果您需要向视图中添加任何自定义内容,或者如果您需要对视图进行无法进行的自定义设置在Interface Builder中就是这样。否则,您不需要实现
viewDidLoad
,只需在
viewDidLoad
中将所有
IBOutlet
s设置为nil即可。