0

我研究了数百个帖子,但仍然无法弄清楚我的问题出在哪里。我有一组图像名称,我正在尝试随机选择图像并更新事件的图像视图。在我的设备上运行时,它会在 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];
}
4

1 回答 1

2

您正在使用imageNamed:方法来设置 imageview 的图像。但问题是imageNamed:方法具有自己的缓存机制,您无法对其进行任何控制。因此,我们不知道何时何地释放分配的内存.所以不要使用imageNamed:方法,而是使用以下方法来设置图像。

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

imgviw.image = [ UIImage imageWithContentsOfFile: imgPath];

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

于 2013-01-26T06:57:20.650 回答