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 に答える