1

各ページに画像があるページスライダービューがあります。NSOperationQueueプログラムの実行中にサーバーから画像をダウンロードするために使用しています。はNSOperationQueue、次のメソッドを呼び出すために使用されます。

-(NSData *)imageWith:(NSString *)imageName
{

NSString *imagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:imageName];
NSData *imageData = [NSData dataWithContentsOfFile:imagePath];

if (!imageData) {

   imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSString stringWithFormat:@"%@/%@", picsURL,imageName] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]];

    if (imageData) {

        [imageData writeToFile:imagePath atomically:YES];
    }
}     
 return imageData;
}

次に、メインスレッドを使用して、ダウンロードした画像をスクローラービューに表示します。

[self performSelectorOnMainThread:@selector(loadPic:) withObject:[NSArray arrayWithObjects:[self imageWith:[picsNames objectAtIndex:imageView.tag]], [NSString stringWithFormat:@"%d", imageView.tag], nil] waitUntilDone:YES];

次のメソッドを呼び出します。

-(void)loadPic:(NSArray *)imageAndTagArray
{
    if (imageAndTagArray.count) {

    //loading the image to imageview
    UIImageView *imageView = (UIImageView *)[scrollView viewWithTag:[[imageAndTagArray objectAtIndex:1] intValue]];
    imageView.image = [UIImage imageWithData:((NSData *)[imageAndTagArray objectAtIndex:0])];

    //stopping the indicator
    [((UIActivityIndicatorView *)[imageView viewWithTag:ACTIVITY_INDICATOR_TAG]) stopAnimating];
}
}

最初の 60 枚の画像ではすべて正常に動作しますが、その後メモリ警告が表示され、約 100 枚の画像でアプリがクラッシュします。

私はこれに多くの時間を費やしてきましたが、何をすべきかわかりません。Instruments を使用しましたが、漏れは検出されません。Analyze も使用しましたが、どちらも何も表示されませんでした。

編集:

imageWith: メソッドの定義を次の定義に置き換えても、5.jpg がローカル イメージであるという警告が引き続き表示されます。

-(NSData *)imageWith:(NSString *)imageName
{
     return UIImagePNGRepresentation([UIImage imageNamed:@"5.jpg"]);
}

状況を詳しく教えてください。

アプリが起動すると、ページごとに 9 つの画像を含むページ付きスクロールビューを含むビューが表示されます。scrollview は nsoperationqueue を使用して imageWith: メソッドを呼び出す画像を読み込みます。

ユーザーがいずれかの画像をタップすると、2 番目のビューが開き、選択した画像が完全に表示されます。この 2 番目のビューには、最初のビューと同じ画像を含むスクロール ビューもありますが、フル ディスプレイ (ページごとに 1 つの画像) が表示されます。

2 番目のビューで前後にスクロールすると、約 60 枚の画像を読み込んだ後にアプリがクラッシュします。また、50 枚の画像をロードし、[戻る] ボタンをタップして最初のビューに移動し、別の画像をタップして 2 番目のビューに移動し、約 10 枚の画像をロードすると、クラッシュします。

4

1 に答える 1