【发布时间】:2012-04-26 10:28:49
【问题描述】:
我的记忆有问题。我使用 ARC。我正在将 .jpgs 加载到我的视图上的 UIImageView。
Code showing example situation:
//.h file
@interface myClass : UIViewController
{
IBOutlet UIImageView * back;
}
// don' t have @property
// back is connected in .xib
//.m file
-(void) viewDidLoad {
UIImage * myImg =[UIImage imageNamed:imgName];
back.image=myImg;
}
-(void) returnToPrevoriousView {
[self removeFromSuperview];
back.image = nil;
}
问题是我从另一个视图来到这个视图,而 imgName 可以有很多值。例如,我可以来 myClass 六次,然后我有日志:收到内存警告和我的应用程序崩溃。
我认为 myImg 没有从内存中释放?我不知道怎么解决? JPG 大约有 100kb。
PS。当我加载 .png 时,它可以工作(也更快),尽管 .png 图像通常有 600kB。但我认为它仍然不释放内存?
【问题讨论】:
-
当您从
viewDidLoad中删除该代码时,是否还会发生这种情况?另外,你为什么要使用removeFromSuperview而不是仅仅用dismissViewControllerAnimated:completion:退出整个控制器? -
当我删除 back.image=myImg 然后应用程序工作(但我需要这个图像)。我通过调用 [ parent addSubview: myClass ] 添加 myClass。我可以用其他方式吗?我不需要 navigationController。
-
如果这与视图控制器中的内部缓存有关,而不是与图像相关的任何内容,我不会感到惊讶。您没有正确退出视图控制器,请先尝试修复它。
-
我将 addSubview 更改为:[self addChildViewController:myClass] 并在 out 按钮中添加:[self removeFromView] 和 [self removeFromParentViewController]]。现在工作。谢谢:)
-
你为什么不直接使用
pushModalViewController和dismissViewController?