问题描述
|
我对动画有问题。开始时,一切都很顺利。但是,当应用程序运行一定时间(约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];
谁能解释一下?是由于内存问题还是其他原因?提前致谢。
解决方法
[self.view addSubview:aSubview];
您每3秒添加一个子视图。因此,在10分钟后,会有200个子视图,这些子视图需要太多的内存,因此会降低应用程序的速度。在添加新的子视图之前,如果不需要以前的子视图,则将其删除。如果同时需要200个子视图,则应重新考虑设计。
编辑:对问题进行编辑后,为什么每次都需要添加film
?每次调用该方法时,都会添加一个新的3对象。请注意,超级视图保留子视图。因此,如果该方法被调用20次,则内存中将有20个3×3对象。
, 是的,您的问题是随着时间的推移内存聚合。要解决此问题,请使用Instruments检查内存使用情况,并找出导致它的原因。您可能不会释放某些对象。在XCode中,转到产品->配置文件,或按\“ cmd + i \”选择\“分配\”并手动添加\“泄漏\”。运行仪器并尝试调试您的问题。
, [self.view addSubview:aSubview];
从not7ѭ的苹果文档开始,以上根本不是问题。
视图只能有一个超级视图。如果
视图已经具有超级视图,并且
视图不是接收者,此方法
删除之前的上一个超级视图
使接收者具有新的视角。
就内存而言,动画始终是一项繁重的操作,需要在动画前后存储很多东西,而对于应用程序开发人员而言,这些是看不到的。在您的情况下,您将在一个循环中执行超过10分钟的操作,这将导致减少下一个动画操作的内存可用性。