各ページに画像があるページスライダービューがあります。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 枚の画像をロードすると、クラッシュします。