правильный способ выпустить UIImageView - PullRequest
0 голосов
/ 04 января 2011

после того, как вы задали вопрос об инструментах и ​​обнаружили проблемы с моим кодом, есть два вопроса:

1-й: Почему приведенный выше код показывает в инструменте выделения именно то, что мне нужно? (Выделенная память меньше 30 Мб)

NSMutableArray* arrayOfImages = [[NSMutableArray alloc]initWithCapacity:30];
for (int i = 0; i <= 30; i++){
    NSString* path = [[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"picture%d",i] ofType:@"png"];
    UIImage* img = [[UIImage alloc]initWithContentsOfFile:path];
    [arrayOfImages addObject:img];
    [img release];
}
imageView.animationImages = arrayOfImages;
[arrayOfImages release];
....
imageView.animationImages = nil;
[imageView release];

Но на самом деле выделяется больше памяти.

Согласно документации разработчика (Управление памятью), я полагаю, что все делаю правильно, но на устройстве программа обычно вылетает из-за нехватки памяти. Конечно, это не полный код, но проблема здесь определенно. (В приложении есть 5 UIImageViews с анимацией, и все они используют слишком много памяти.)

РЕДАКТИРОВАТЬ Хорошо, возможно ли как-то решить эту проблему. С проблемами памяти при использовании UIImages?

Ответы [ 3 ]

1 голос
/ 04 января 2011

вы можете попытаться обернуть NSAutoreleasePool в вашей функции for {}. У меня была та же проблема с памятью, когда я создал массив объектов размером 86000. Я не знаю, почему он иногда не выпускается так, как должен.

1 голос
/ 04 января 2011

Управление памятью здесь выглядит нормально.

Вы уверены, что у вас есть изображения с 0 ... 30, то есть всего 31, а не 30, как ваш код предлагает при распределении массива.

Что касается размера, 31 изображение займет 320 * 480 * 4 * 31 = 19046400 байт, что требует примерно 18 МБ минимум.

Редактировать: если у вас есть 5 из них, мы, вероятно, говорим 80+ МБ!

0 голосов
/ 04 января 2011

Вы создаете 31 NSImages. Если picture0.png или picture30.png не существуют в вашем комплекте, у вас может быть проблема.

Попробуйте сделать это с i + = 5 или i + = 10, чтобы увидеть, решит ли это проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...