我有一个带标量ivars的UIViewController。我想知道当控制器收到内存警告时会发生什么。
testBool将保持不变或将被重置?
class.h
@interface myView : UIViewController
{
BOOL testBool;
}
答案 0 :(得分:1)
当您收到内存警告时,您需要对此做出反应。系统将尝试帮助您(释放VC的视图并在需要时再次调用loadView / viewDidLoad)但您需要处理所有对象。
说到对象..如果你定义" BOOL *"这将是一个指针..我不认为你真的想要这个(你需要分配一些内存并将这个内存地址分配给testBool,这样你就可以使用* testBool = YES / NO和free来访问真正的标量值这个记忆在[自我dealloc])。
通常,可可内存管理仅适用于OBJECTS。如果你乱搞指向标量的指针,你必须处理内存(de)分配。你应该使用标量ivars或像NSNumber这样的基础类型。如果您使用ARC,您甚至不必关心内存管理(保留/释放)。只有在收到内存警告时,才应将nil
分配给变量(ARC将处理内存管理)。
答案 1 :(得分:0)
不,当你收到警告时,它不会被释放,只是
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
它叫。这告诉你,你的班级占用了大量的内存,所以你应该发布一些你没有使用的东西。
但是如果你收到一些内存警告,就会调用dealloc,并确保你的var会消失。