我一直在通过Instruments(Allocator)运行我的应用程序,检查我的应用程序的内存使用情况。当我退出页面时,大多数应用程序释放内存,但是在某些使用动画的页面上使用:
-(IBAction)start:(id)sender
{
animation.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"Paddle 1.jpg"],
[UIImage imageNamed:@"Paddle 2.jpg"],
[UIImage imageNamed:@"Paddle 3.jpg"],
[UIImage imageNamed:@"Paddle 4.jpg"],nil];
[animation setAnimationRepeatCount:0];
animation.animationDuration = 2.5;
[animation startAnimating];
}
内存跳转到大约45MB的使用率(每个jpgs为330kb),当我退出页面时没有释放。
我阅读并发现当故事板变深时ARC并不总是有效,所以我理解这些页面(MainView> Container> UITableView> UITabView> UIImage)很可能是问题所在。
当我退出应用程序时,内存会回落到9MB并释放图像,但是当我退出视图时是否应该释放图像?该应用程序从未在我身上崩溃或者说存在内存问题,我只是不希望这是Apple拒绝该应用程序的原因。
这是打开动画时应用程序打开时的内存使用量(低点)(最重要的一步)
此问题是图片仅在退出应用时才会释放吗?如果是这样,当我改变视图时ARC没有自动释放图像,我需要做什么?
答案 0 :(得分:0)
尝试更改每个
[UIImage imageNamed:@"Paddle 1.jpg"]
到
[UIImage imageWithContentsOfFile: GetImgWithoutCaching(@"Paddle 1.jpg")]
并添加功能
UIImage* GetImgWithoutCaching(NSString* imgName)
{
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imgName ofType:nil];
return [UIImage imageWithContentsOfFile:imagePath];
}
因为imageNamed会进行一些缓存,而imageWithContentsOfFile则不会。
最终代码应如下所示:
UIImage* GetImgWithoutCaching(NSString* imgName)
{
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imgName ofType:nil];
return [UIImage imageWithContentsOfFile:imagePath];
}
-(IBAction)start:(id)sender
{
animation.animationImages = [NSArray arrayWithObjects:
GetImgWithoutCaching(@"Paddle 1.jpg"),
GetImgWithoutCaching(@"Paddle 2.jpg"),
GetImgWithoutCaching(@"Paddle 3.jpg"),
GetImgWithoutCaching(@"Paddle 4.jpg"),nil];
[animation setAnimationRepeatCount:0];
animation.animationDuration = 2.5;
[animation startAnimating];
}