На моем iPad запущено приложение, которое загружает изображения в карусель. Всего 138 изображений. Если я уменьшу это число до 100, приложение загрузится нормально. Однако на 138 приложение приостанавливается, а не вылетает.
ViewDidLoad и первый оператор for
достигаются, как указано точкой останова. Проблема заключается во втором 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];
}
Я предполагаю, что есть проблема с памятью, хотя, поскольку я использую iOS 5 с ARC , мне не нужно было заниматься каким-либо ручным управлением памятью.
Может ли быть так, что слишком много много будет храниться в памяти? Это 138 изображений при ~ 146 КБ на человека. Это примерно 20 МБ, но я не думаю, что это само по себе может вызвать проблему.
GDB завершает работу без какого-либо полезного вывода, фактически без вывода вообще. Запуск инструментов показывает, что при паузе реальное использование памяти составляет всего 6,11 МБ, 77,4% ЦП, но 175 МБ виртуальной памяти.
Меня беспокоит тот факт, что в памяти нет предупреждения или даже реального сбоя, поток просто приостанавливается и не может быть возобновлен или уничтожен автоматически, вы должны уничтожить его из xcode.