我有一个带有父视图控制器的应用程序.它有一些按钮,当单击其中一个按钮时,它会显示一个模态视图控制器(使用XIB).我用来呈现和解散Modal VC的代码是:
iPadViewController *iPadVC = [[iPadViewController alloc] initWithNibName:nil bundle:nil]; [self presentViewController:iPadVC animated:YES completion:NULL];
并解雇:
-(IBAction)Back:(id)sender{ [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; }
所以问题是,当我解雇它时,它不会释放任何内存.如果我把它呈现3/4次就会崩溃.我正在使用ARC,从来没有遇到过类似的问题,因为我坚持认为ARC完成了所有的内存管理工作.我确实有一些需要大量空间的背景,他们也没有被释放.我试过了 :
[backgroundImage removeFromSuperview]; backgroundImage=nil;
使用此代码确实减少了内存,我不确定图像是否已被释放,因为下次按下按钮时内存增加到近300mb并因"内存压力"而终止.如果VC被发布它会工作正常,因为它只在iPad上使用160mb,在iPhone上使用65mb.此外,我的图像是通过Xib实用程序选择的:
IMG http://i42.tinypic.com/2z8yiva.png
我尝试使用Xcode仪器并且它没有显示任何泄漏(!)但它确实表明每次单击按钮时分配都在增长和增长.
使用Xcode Tools分配http://i43.tinypic.com/2eutv78.png
在我的ViewController.h上:
IBOutlet UIImageView (...); IBOutlet UIImageView (...); IBOutlet UILabel (...); IBOutlet UIButton (...); IBOutlet NSTimer (...); IBOutlet UIImage (...); IBOutlet UIView (...); -(IBAction)Back:(id)sender; @property (nonatomic, assign) int ; @property (nonatomic) IBOutlet UIButton ; @property (nonatomic) IBOutlet UIButton ; @property (nonatomic) IBOutlet UIButton ; @property (nonatomic) IBOutlet UIView ; @property (nonatomic) IBOutlet UILabel ;
我试图提供有关我的代码的所有详细信息,但如果您还需要其他任何内容,请告诉我,并非常感谢您!
如果您的图像很大,请看这个问题:在UIScrollView中使用相当大的图像解决UIImageViews使用的内存问题
总结一下:使用nib文件时,所有已分配的图像都是使用加载的
[UIImage imageNamed]
已知会导致大量内存分配的方法,因为它总是缓存图像.尝试将图像分配给代码中的视图
[UIImage imageWithContentsOfFile:path];
方法(在上述问题的答案中描述).