首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内存不在ARC下释放

内存不在ARC下释放
EN

Stack Overflow用户
提问于 2013-12-01 08:36:16
回答 2查看 3.6K关注 0票数 1

我有一个应用程序与父视图控制器。它有一些按钮,当其中一个被点击时,它会显示一个Modal视图控制器(使用XIB)。我用于显示和取消Modal VC的代码是:

代码语言:javascript
运行
复制
iPadViewController *iPadVC = [[iPadViewController alloc] initWithNibName:nil bundle:nil];
        [self presentViewController:iPadVC animated:YES completion:NULL];

并驳回:

代码语言:javascript
运行
复制
-(IBAction)Back:(id)sender{
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}

所以问题是,当我拒绝它的时候,它不会释放任何记忆。如果我把它呈现3/4次,它就会崩溃。我正在使用ARC,从来没有遇到过类似的问题,因为我很难让ARC完成所有内存管理工作。我确实有一些背景,需要很大的空间,他们也不会被释放。我试过:

代码语言:javascript
运行
复制
[backgroundImage removeFromSuperview];
backgroundImage=nil;

使用此代码,内存确实会减少,我不确定图像是否被释放,因为下一次按下按钮时,内存会增加到将近300 to,并由于“内存压力”而终止。如果VC发布了,它就能正常工作,因为它在iPad上只使用160 VC,在iPhone上只使用65 VC。另外,我的映像是通过Xib实用程序选择的:

我试着使用Xcode仪器,它没有显示任何泄漏(!)但它确实表明,每次我点击一个按钮,分配都在增长和增长。

在我的ViewController.h上:

代码语言:javascript
运行
复制
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 ;

我试着给出关于我的代码的所有细节,但是如果你还需要什么,请告诉我,非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-01 09:34:53

如果你的图片很大,请看这个问题:Problem dealloc'ing memory used by UIImageViews with fairly large image in an UIScrollView

总之:当使用nib文件时,所有分配的图像都将使用

代码语言:javascript
运行
复制
[UIImage imageNamed]

方法,因为它总是缓存图像,因此它会导致巨大的内存分配。尝试将图像分配给代码中的视图。

代码语言:javascript
运行
复制
[UIImage imageWithContentsOfFile:path];

方法(在对上述问题的回答中对此进行了描述)。

票数 5
EN

Stack Overflow用户

发布于 2013-12-01 08:40:01

在模态视图控制器中:

代码语言:javascript
运行
复制
[self dismissViewControllerAnimated:TRUE completion:Nil];

在主视图控制器中,先检查它是否存在,然后再显示它:

代码语言:javascript
运行
复制
iPadViewController *iPadVC;

if (iPadVC == Nil)
 iPadVC = [[iPadViewController alloc] initWithNibName:nil bundle:nil];

[self presentViewController:iPadVC animated:YES completion:NULL];

听起来好像iPadVC总是在范围内,所以ARC可能不会发布它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20310304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档