当我连续三次在 UIImageView 上设置图像属性时(有时两次就足够了),我的应用程序崩溃了。有几次我在应用程序关闭之前看到内存警告,但大多数时候它只是崩溃了。该应用程序不会在模拟器中崩溃,所以我很确定这是一个内存问题。
这是我在设置图像属性时使用的代码:
-(void)changeBgPictureTo:(UIImage *)img
{
[self.backgroundImage setImage:img];
}
UIImages 使用以下方法分配[UIImage imageWithData:]
:
[UIImage imageWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:type]]];
图像前两次设置正确,但第三次崩溃。它与特定的图像文件无关。我已经尝试了 10 种不同的图像,但没有任何区别。
如何让 UIImageView 卸载以前加载的图像?
编辑: 好的,我被要求提供整个代码,所以这里是:
我正在使用一个看起来像这样的类:
@interface MyImage : NSObject
{
UIImage* image;
int imgId;
NSArray* colors; //contains 'UIColor' objects.
}
@property (nonatomic, retain) UIImage* image;
@property (nonatomic, retain) NSArray* colors;
@property (nonatomic, readwrite) int imgId;
-(id)initWithFileName:(NSString*)fileName withType:(NSString*)type andId:(int)imgId andColors:(NSArray*)colorArray;
@end
这是初始化实现:
-(id)initWithFileName:(NSString*)fileName withType:(NSString*)type andId:(int)imageId andColors:(NSArray*)colorArray
{
self = [super init];
if (self)
{
self.colors = [NSArray arrayWithArray:colorArray];
self.imgId = imageId;
self.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:type]]];
}
return self;
}
我有一个数据控制器,它有一个“MyImage”对象列表,通过这个调用添加到一个循环中:
[self.myImages addObject:[[MyImage alloc] initWithFileName:[NSString stringWithFormat:@"0000%d", i] withType:@"jpg" andId:i andColors:colors]];
我有 9 张图片,分别命名为 00001.jpg、00002.jpg、.....、00008.jpg。
这个数据控制器有一个这样的方法:
-(MyImage *)getImageWithId:(int)imgId
{
for (MyImage* img in self.myImages)
{
if (img.imgId == imgId)
return img;
}
return nil;
}
getImageWithId 方法是这样调用的:
-(void)btnPushed:(id)sender
{
[self.delegate changeBgPictureTo:[self.imgDataController getImageWithId:((UIButton*)sender).tag]];
}
changeBgPictureTo 方法是设置图像属性的方法:
-(void)changeBgPictureTo:(MyImage *)img
{
NSLog(@"Setting image: %d", img.imgId);
[self.backgroundImage setImage:img.image];
}
日志打印三次“设置图像:0000X:”,但在第三次打印后不久崩溃。