イメージをカルーセルにロードするアプリケーションを iPad で実行しています。全部で 138 枚の画像があります。その数を 100 に減らすと、アプリケーションは問題なくロードされます。ただし、138 で、アプリケーションはクラッシュするのではなく一時停止します。
ブレークポイントで示されているように、 viewDidLoad と最初のfor
ステートメントに到達しています。問題は 2 番目のfor
ステートメントにあります。
// loading images into the queue
loadImagesOperationQueue = [[NSOperationQueue alloc] init];
NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithCapacity:14];
for (int i = 0; i < 137; i++) {
[tmpArray addObject:[NSString stringWithFormat:@"cover_%d.jpg", i]];
}
for (int i = 0; i < 137; i++) {
int index = arc4random() % [tmpArray count];
NSString *imageName = [tmpArray objectAtIndex:index];
[tmpArray removeObjectAtIndex:index];
[(AFOpenFlowView *)self.view setImage:[UIImage imageNamed:imageName] forIndex:i];
}
メモリの問題があると推測していますが、ARCで iOS 5 を使用しているので、手動でメモリ管理を行う必要はありません。
記憶に保持するにはあまりにも多くのことが起こっているのではないでしょうか? 138 個の画像 @ 1 つあたり ~146 KB です。これはおよそ 20 MB ですが、それだけで問題が発生する可能性はないと思います。
GDB は有用な出力なしで終了します。実際には出力はまったくありません。計測器を実行すると、一時停止が発生したときの実際のメモリ使用量はわずか 6.11 MB、CPU は 77.4% ですが、仮想メモリは 175 MB であることがわかります。
私が懸念しているのは、メモリの警告や実際のクラッシュさえなく、スレッドが一時停止するだけで、自動的に再開または強制終了できないことです。xcode 内から強制終了する必要があります。