ARC下没有发布内存

时间:2013-12-01 08:36:17

标签: ios objective-c memory-management automatic-ref-counting

我有一个带有父视图控制器的应用程序。它有一些按钮,当单击其中一个按钮时,它会显示一个模态视图控制器(使用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 ;

我试图提供有关我的代码的所有详细信息,但如果您还需要其他任何内容,请告诉我,并非常感谢您!

2 个答案:

答案 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可能无法释放它。