更新UIImageView会造成内存泄漏

时间:2013-01-25 22:24:27

标签: ios xcode uiimage imageview

我已经研究了数百篇帖子,但仍然无法弄清楚我的问题在哪里。我有一系列图像名称,我正在尝试随机选择图像并更新事件的imageview。在我的设备上运行时,它会在12-15张图像后崩溃。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.predictionArray = [[NSArray alloc]  initWithObjects:@"IMG_0006.JPG",
                        @"IMG_0007.JPG",
                        @"IMG_0008.JPG",
                        @"IMG_0034.jpg",
                        @"IMG_0036.jpg",
                        @"IMG_0043.jpg",
                        @"IMG_0062.JPG",
                        @"IMG_0069.JPG",
                        @"IMG_0076.jpg",
                        @"IMG_0093.jpg",
                        @"IMG_0096.jpg",
                        @"IMG_0168.jpg",
                        @"IMG_0240.jpg",
                        @"IMG_0251.jpg",
                        @"IMG_0262.jpg",
                        @"IMG_0264.jpg",
                        @"IMG_0310.jpg",
                        @"IMG_0351.jpg",
                        @"IMG_0355.jpg",
                        @"IMG_0391.jpg",
                        @"IMG_0404.jpg",
                        @"IMG_0417.jpg",
                        @"IMG_0428.jpg",
                        @"IMG_0461.jpg",
                        @"IMG_0471.jpg",
                        @"IMG_0485.jpg",
                        @"IMG_0492.jpg",
                        @"IMG_0550.jpg",
                        @"IMG_0568.jpg",
                        @"IMG_0822.jpg", nil];

    [self makePrediction];
}


- (void) makePrediction {
    NSUInteger index = arc4random_uniform(self.predictionArray.count);

    [self.pageImage setImage:[UIImage imageNamed:[self.predictionArray objectAtIndex:index ]]];

}


-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [self makePrediction];
}

1 个答案:

答案 0 :(得分:1)

您正在使用 imageNamed:方法设置imageview的图像。但问题是 imageNamed:方法,它有自己的缓存机制,您没有任何控制权在它之上。所以当&释放已分配内存的地方我们不知道。所以不使用 imageNamed:方法,而是使用以下方法设置图像。

NSString* imgpath= [ [ NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"];

imgviw.image = [ UIImage imageWithContentsOfFile: imgPath];

使用 imageWithContentsOfFile:方法的主要优点是此方法不会缓存图像,因此不会因保留大图像而导致任何内存问题。在将图像应用于imageview之前,您可以设置imgviw.image = nil&然后设置图像以避免内存泄漏问题