我有一个带有父视图控制器的应用程序。它有一些按钮,当单击其中一个按钮时,它会显示一个模态视图控制器(使用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乐器并且它没有显示任何泄漏(!)但它确实表明每次单击按钮时分配都在增长和增长。
Allocations with 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 ;
我试图提供有关我的代码的所有详细信息,但如果您还需要其他任何内容,请告诉我,并非常感谢您!
答案 0 :(得分:5)
如果您的图片很大,请看这个问题:Problem dealloc'ing memory used by UIImageViews with fairly large image in an UIScrollView
总结:使用nib文件时,使用
加载所有已分配的图像[UIImage imageNamed]
已知会导致大量内存分配的方法,因为它总是缓存图像。 尝试使用
将图像分配给代码中的视图[UIImage imageWithContentsOfFile:path];
方法(在上述问题的答案中描述)。
答案 1 :(得分:0)
在模态视图控制器中:
[self dismissViewControllerAnimated:TRUE completion:Nil];
在主视图控制器中,在显示之前检查它是否存在:
iPadViewController *iPadVC;
if (iPadVC == Nil)
iPadVC = [[iPadViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:iPadVC animated:YES completion:NULL];
听起来像iPadVC总是在范围内,因此ARC可能无法释放它。