2009-06-11 3 views
1

Я создаю приложение, которое включает в себя ряд последовательностей изображений (5 последовательностей с примерно 80 изображениями). Он отлично работает в симуляторе iPhone, но заставляет его перезагружать iPhone, когда я его тестирую. Кстати, каждое png-изображение имеет размер около 8k. Кто-нибудь успешно построил подобное приложение? Я использую слишком много ресурсов для iPhone для обработки? Кто-нибудь?iPhone Dev: большие последовательности png вызывают сбой?

UPDATE:
Спасибо всем, что вы ответили! Я изменил свой код, чтобы использовать [UIImage imageWithContentsOfFile:] вместо [UIImage imageNamed:] Однако я все еще не могу предотвратить повреждение приложения iPhone. (обратите внимание, что мои pngs не такие большие, как 400x400px/8k)

Есть ли у кого-нибудь предложения?

Вот мой код:

// code snippet: 
    myFrames = [[NSMutableArray alloc] initWithCapacity:maxFrames]; 
      NSMutableString *curFrame; 
      num = 0; 
    // loop (maxframes = 80) 
      for(int f = 1; f < maxFrames+1; f++) 
      { 
       curFrame = [NSMutableString stringWithString:tName]; 

       if(f < 10) [curFrame appendString:[NSString stringWithFormat:@"00%i",f]]; 
       else if(f>9 && f<100) [curFrame appendString:[NSString stringWithFormat:@"0%i",f]]; 
       else [curFrame appendString:[NSString stringWithFormat:@"%i",f]]; 

       UIImage *img = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:curFrame ofType:@"png"]]; 

       if(img) [myFrames addObject:img]; 
       [img release]; 
      } 
// animate the images! 
      self.animationImages = myFrames; 
      self.animationDuration = (maxFrames * .05); // Seconds 
      [self startAnimating]; 

ответ

3

Лучший способ выяснить это, чтобы запустить приложение под инструменты с помощью Утечки или объектов Alloc. Если вы видите восходящую тенденцию, которая продолжает расти, у вас может быть утечка.

Если вы используете [UIImage imageNamed:], вы должны знать, что он предварительно кэширует оптимизированную версию, которая занимает больше памяти по сравнению с [UIImage imageWithContentsOfFile:]. Кроме того, до появления iPhone 3.0 кеш, созданный с помощью [UIImage imageNamed:], не освобождается при наличии предупреждения о памяти.

В настоящее время iPhone имеет только 128 МБ памяти, некоторые из которых используются самой ОС. Изображение 320x480, полностью несжатое с альфа-каналом, может занимать 614 тыс. Если у вас 400 уникальных изображений с полным экраном, это более 128 МБ оперативной памяти, предполагая, что они загружены и кэшированы без сжатия.

1

номер один причина, почему приложение не будет врезаться на тренажере, но на телефоне будет быть память

на в iPhone симулятор AFAIK памяти не ограничивается 128Mb в то время как на Iphone, когда он достигает 128Мб перезапускает , Поэтому проверьте использование памяти на симуляторе. Вы должны изменить способ загрузки изображений и проверить наличие утечек. Также проверьте, не получили ли вы предупреждения о низкой памяти, внедряя методы (я забыл, что они называются :()

1

Я видел, как приложения запускались в симуляторе, а не на телефоне из-за неправильного форматирования PNG (даже одного ненадлежащего отформатированное изображение может вызвать этот крах). Проверьте, чтобы формат ваших изображений соответствовал формату файлов PNG, предоставленных яблоком в их примерах приложений.

Это означает, что 400 изображений в полноэкранном режиме могут привести к тому, что он будет исчерпан так как в памяти они будут занимать гораздо больше, чем 8kb. Не уверен, насколько велики эти изображения, но если они все в памяти, они должны быть очень и очень маленькими на iPhone.

0

Th Первый ответ на ваш вопрос гласит, что, хотя ваши PNG могут занимать только 8K на диске, то есть сжатая форма на диске. Когда он загружается в память, он распаковывается и намного больше, чем 8K. При 32 бит на пиксель изображение 400x400 будет 640K.

Даже без альфа-канала вы смотрите на 480K. 480K x 80 кадров, что составляет 38,4 МБ, что, безусловно, ползут в использовании большего объема памяти, чем у iphone, доступной сразу для вашего приложения. Here - статья о некоторых проблемах с получением существенной информации о памяти из ОС iPhone.