我的动画有问题。一开始,一切都很顺利。但是,当应用程序运行一段时间(大约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];
任何人都能解释一下吗?是由于内存问题还是其他原因?提前谢谢。
答案 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分钟,导致下一个动画操作的内存可用性降低。