我的应用程序因每次动画后内存增加而崩溃。
以下是我的示例代码:
-(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更快。
答案 0 :(得分:1)
将[[NSArray alloc] initWithObjects:xxx];
替换为[NSArray arrayWithObjects:xxx];
。
目前,数组对象被保留两次(一次由alloc
有效,一次由gun.animationImages = xxx
),但仅释放一次(当枪对象被释放,或者animationImages属性设置为新的东西),意味着它永远不会被释放。
arrayWithObjects
方法返回一个自动释放的对象,这意味着它不需要由您手动释放。
答案 1 :(得分:1)
如果我是你,我会考虑仅仅为屏幕的某些部分制作动画,或者将图像压缩成低质量的jpgs或类似的东西。