我将一系列.png图像加载到动画中,效果很好,但是当我切换到另一个视图时,动画使用的内存不会被释放。每次返回该视图时会占用越来越多的内存,直到应用程序由于内存压力过大而退出。
当视图发生变化时,是否有任何我可以放入视图中的消失或另一种从动画中释放内存的方法?
此外,这似乎只发生在我的4S运行iOs 7.在我的4S 6.1.2上运行顺利。
NSArray *animationArray = [NSArray arrayWithObjects:
[UIImage imageNamed:@"0001.png"],
[UIImage imageNamed:@"0002.png"],
[UIImage imageNamed:@"0003.png"],
...
nil];
self->tapanimation1.animationImages =animationArray;
self->tapanimation1.animationDuration = .5;
self->tapanimation1.animationRepeatCount = 1;
[self->tapanimation1 startAnimating];
答案 0 :(得分:4)
如何在动画中分配图像---有两种初始化UIImage的方法
首先是 - >
[UIImage imageNamed:@"kshitij.png"];
这种方法存在问题,即使在发布时也不会释放内存。
第二是 - >
如果图片在你的应用套装中,那么请始终使用此
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"kshitij" ofType:@"png"];
UIImage *image = [[UIImage alloc]initWithContentsOfFile:filePath];
现在使用此图像并将其释放,它肯定会保存您的一些MB。 并且您还可以使用ARC来节省内存。
试试这段代码 -
NSSMutableArray *imageNameArray = [[NSSMutableArray
alloc]initWithObjects:@"0001",@"0002",nil];
NSMutableArray *imageArray = [[NSMutableArray alloc] init];
for(int i=0;i<imageNameArray.count;i++)
{
NSString *filePath = [[NSBundle mainBundle]pathForResource:[imageNameArray
objectAtIndex:i] ofType:@"png"];
UIImage *image = [[UIImage alloc]initWithContentsOfFile:filePath];
[imageArray addObject:image];
}
self->tapanimation1.animationImages = imageArray;
self->tapanimation1.animationDuration = .5;
self->tapanimation1.animationRepeatCount = 1;
[self->tapanimation1 startAnimating];
现在,当动画确实停止释放数组时。如果您使用ARC,请将其设为零。
答案 1 :(得分:0)
你如何导航到新的视图控制器,你怎么回来?你在使用unwind segue吗?您是将新视图控制器作为模态呈现,然后将其解雇?
或者你使用segue链接到第二个VC,然后另一个segue链接回来?如果你使用第二个(非展开)segue链接回来,那那就是你的问题。这将导致您每次都创建第一个视图控制器的新实例。
至于释放内存,你当然可以在viewDidDisappear中将视图的animationImages数组设置为inil,然后在viewWillAppear中重新加载图像,但是每次往返时内存占用都没有意义。第二个视图控制器。这表明存在问题。