Свободная память после анимации iphone - PullRequest
0 голосов
/ 20 сентября 2010

Мое приложение падает из-за накопления памяти после каждой анимации.

Вот мой пример кода:

-(IBAction) shoot: (id)delegate{
[gun setImage:[UIImage imageNamed:@"animation_machin_guns_320x480_7.png"]];
UIImage *frame1 = [UIImage imageNamed:@"animation_machin_guns_320x480_1.png"];
UIImage *frame2 = [UIImage imageNamed:@"animation_machin_guns_320x480_2.png"];
UIImage *frame3 = [UIImage imageNamed:@"animation_machin_guns_320x480_3.png"];
UIImage *frame4 = [UIImage imageNamed:@"animation_machin_guns_320x480_4.png"];
UIImage *frame5 = [UIImage imageNamed:@"animation_machin_guns_320x480_5.png"];
UIImage *frame6 = [UIImage imageNamed:@"animation_machin_guns_320x480_6.png"];
UIImage *frame7 = [UIImage imageNamed:@"animation_machin_guns_320x480_7.png"];    
gun.animationImages = [[NSArray alloc] initWithObjects:frame1, frame2, frame3, frame4, frame5, frame6, frame7,nil];
gun.animationDuration = 1;
gun.animationRepeatCount = 1; 
[gun startAnimating];
[frame1 release];
[frame2 release];
[frame3 release];
[frame4 release];
[frame5 release];
[frame6 release];
[frame7 release];}

Похоже, что освобождение фреймов не работает.Я попытался использовать это http://kosmaczewski.net/projects/iphone-image-cache/ для кэширования изображений, но я думаю, что я не знаю, как правильно его использовать, так как память накапливается быстрее, чем при использовании imageNamed.

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

На вашем месте я бы подумал только об анимации частей экрана или, возможно, сжатии изображений в низкокачественные jpgs или что-то в этом роде.

1 голос
/ 20 сентября 2010

Заменить [[NSArray alloc] initWithObjects:xxx]; на [NSArray arrayWithObjects:xxx];.

В настоящее время объект массива сохраняется дважды (один раз эффективно alloc и один раз gun.animationImages = xxx), но освобождается только один раз (когда объект оружия выпущен или для свойства animationImages установлено какое-тоновый), что означает, что он никогда не будет выпущен.

Метод arrayWithObjects возвращает объект с автоматическим освобождением, что означает, что он не должен быть выпущен вами вручную.

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