この問題は私を完全に困惑させました。これは、Xcode 4.2 を使用する iOS 5.0 用です。
私のアプリでは、ユーザーがフォトアルバムから画像を選択できるようにし、それらの画像をアプリのドキュメントディレクトリに保存しています。かなり簡単です。
次に、viewController.m ファイルの 1 つで複数の UIImageView を作成し、ユーザーがアプリ ディレクトリから選択した画像の 1 つから画像ビューの画像を設定します。問題は、特定の数の UIImage セットの後、「受信メモリ警告」が表示されることです。これは通常、10 枚の写真がある場合に発生します。ユーザーが 11 枚の写真を選択したとしましょう。アプリはエラー (GBC) でクラッシュします。注: これらの各画像は、1 枚あたり少なくとも 2.5 MB です。
何時間ものテストの後、最終的に問題をこのコード行に絞り込みました
[button1AImgVw setImage:image];
そのコードをコメントアウトすると。すべて正常にコンパイルされ、メモリ エラーは発生しません。しかし、そのコードをコメントアウトしないと、メモリ エラーが発生し、最終的にはクラッシュします。また、CreateViews IBAction 全体を処理しますが、最後にクラッシュすることにも注意してください。Xcode 4.2 を使用して iOS 5.0 でこれを実行しているため、解放または解放を行うことができません。
これが私が使用したコードです。誰が私が間違ったことを教えてもらえますか?
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self CreateViews];
}
-(IBAction) CreateViews
{
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES);
documentsPath = [paths objectAtIndex:0];
//here 15 is for testing purposes
for (int i = 0; i < 15; i++)
{
//Lets not get bogged down here. The problem is not here
UIImageView *button1AImgVw = [[UIImageView alloc] initWithFrame:CGRectMake(10*i, 10, 10, 10)];
[self.view addSubview:button1AImgVw];
NSMutableString *picStr1a = [[NSMutableString alloc] init];
NSString *dataFile1a = [[NSString alloc] init];
picStr1a = [NSMutableString stringWithFormat:@"%d.jpg", i];
dataFile1a = [documentsPath stringByAppendingPathComponent:picStr1a];
NSData *potraitImgData1a =[[NSData alloc] initWithContentsOfFile:dataFile1a];
UIImage *image = [[UIImage alloc] initWithData:potraitImgData1a];
// This is causing my app to crash if I load more than 10 images!
// [button1AImgVw setImage:image];
//If I change this code to a static image. That works too without any memory problem.
button1AImgVw.image = [UIImage imageNamed:@"mark-yes.png"]; // this image is less than 100KB
}
NSLog(@"It went to END!");
}
これは、10 枚の画像を選択したときに表示されるエラーです。アプリは起動して動作します
2012-10-07 17:12:51.483 ABC-APP[7548:707] It went to END!
2012-10-07 17:12:51.483 ABC-APP [7531:707] Received memory warning.
画像が 11 個ある場合、このエラーでアプリがクラッシュします
2012-10-07 17:30:26.339 ABC-APP[7548:707] It went to END!
(gbc)