アプリケーションで痕跡のない奇妙なクラッシュが発生しました。これはおそらくメモリ関連の問題ですが、情報がほとんどないため、続行または修正する方法がわかりません。楽器がなかったら、何の手がかりもなかったでしょう。
画像配列 (この例ではサイズ 2 の配列) があり、画像を読み込み、画像コンテキストを作成して描画し、配列に保存します。メソッドが呼び出されるたびに、画像配列オブジェクトが新しいコンテンツに置き換えられます。計測器では、このメソッドの呼び出し中に非常に大量の仮想メモリが使用されていることがわかります。明らかに、各呼び出しのメモリがクリアされていないため、クラッシュします。プロジェクトはARCです。以下にコードをリストします。この問題を再現するために必要なのはこれだけです。(私が使用しているイメージはサイズが約 7MB と少し大きいので、クラッシュを再現するのは簡単です)。また、私はiPad2デバイスを使用しています。
+ (UIImage *)imageCopy:(UIImage *)src
{
UIGraphicsBeginImageContext(src.size);
[src drawAtPoint:CGPointZero];
UIImage *r = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return r;
}
- (IBAction)buttonTouch:(id)sender
{
for (int i=0; i<2; i++)
{
if (i==0)
{
self.mImage = [UIImage imageNamed:@"LARGE_elevation.jpg"];
}
else
{
self.mImage = [UIImage imageNamed:@"LARGE_elevation2.jpg"];
}
// imageArray is a NSMutableArray with capacity of 2
[imageArray setObject:[ViewController imageCopy:self.mImage] atIndexedSubscript:i];
}
((UIImageView *)[self.view viewWithTag:100]).image = self.mImage;
}
これは、メモリ警告が発行された後に 2 回目にクラッシュする計測器の画面です。
ここで使用している「imageCopy」メソッドに大きな問題はありません。
これに関するヘルプは本当に感謝しています。感謝と乾杯、