UIImageView动画滞后

时间:2011-06-12 09:14:24

标签: iphone xcode animation uiimageview

我的动画有问题。一开始,一切都很顺利。但是,当应用程序运行一段时间(大约10分钟)时,动画就会滞后。

以下是viewDidLoad中的代码:

[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(updateImage) userInfo:nil repeats:YES];

并在 - (void)updateImage://图像淡入

[aSubview release];
[aSubview removeFromSuperview];
aSubview = [[UIImageView alloc] initWithFrame:CGRectMake(28, 64, 265, 284)];
aSubview.image = [slideShowArray objectAtIndex:randNum];
[aSubview setAlpha:0.0];
[UIImageView beginAnimations:NULL context:nil];
[UIImageView setAnimationDuration:2.0];
[aSubview setAlpha:1.0];
[UIImageView commitAnimations];
[self.view addSubview:aSubview];

UIImageView *film = [[UIImageView alloc] initWithFrame:CGRectMake(20, 34, 280, 344)];
film.image = [UIImage imageNamed:@"film5.png"];
[film setAlpha:1.0];
[self.view addSubview:film];
[film release];

任何人都能解释一下吗?是由于内存问题还是其他原因?提前谢谢。

3 个答案:

答案 0 :(得分:2)

[self.view addSubview:aSubview];

您每3秒钟添加一次子视图。因此,在10分钟后,有200个子视图需要太多内存,从而减慢了应用程序的速度。在添加新子视图之前,如果不需要,请删除以前的子视图。如果您同时需要200个子视图,那么您应该重新考虑您的设计。

编辑:编辑问题后,为什么每次都需要添加film?每次调用该方法时,您都要添加一个新的film对象。请注意,超级视图保留子视图。因此,如果该方法被调用20次,那么在内存中有20个film个对象。

答案 1 :(得分:0)

是的,您的问题是随着时间的推移聚合内存。要解决此问题,请使用Instruments检查内存使用情况并找出导致内存使用的原因。你可能不会发布一些对象。在XCode中转到产品 - >个人资料或按“cmd + i”选择“分配”并手动添加“泄漏”。运行Instruments并尝试调试您的问题。

答案 2 :(得分:0)

[self.view addSubview:aSubview];

上面的问题根本不是addSubView的苹果文档。

  

视图只能有一个超级视图。如果   视图已经有一个superview和那个   视图不是接收者,这种方法   删除之前的超级视图   使接收器成为新的超级视图。

动画始终是重量级内存操作,需要在动画之前和之后存储许多内容,这些内容对于应用程序开发人员来说是不可见的。在你的情况下,你在一个循环中执行它超过10分钟,导致下一个动画操作的内存可用性降低。