2010-09-20 71 views
0

由于每次动画之后都会建立内存,导致我的应用程序崩溃。iphone动画之后的空闲内存

这里是我的示例代码:

-(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更快。

回答

1

[NSArray arrayWithObjects:xxx];代替[[NSArray alloc] initWithObjects:xxx];

目前,数组对象被保留两次(一次有效地被alloc和一次​​),但只释放一次(枪对象被释放时,或者animationImages属性被设置为新的东西),这意味着它会永远不会被释放。

arrayWithObjects方法返回一个自动释放对象,这意味着它不需要由您手动释放。

1

如果我是你,我会考虑只对屏幕上的动画部分进行动画处理,或者将图像压缩成低质量的jpgs或沿着这些线条的东西。

+0

我需要所有的屏幕动画,我已经尽量减少图像的文件大小。 – Subject78 2010-09-20 13:28:52