2012-03-06 39 views
0

我有一个UIViewController与标量ivars。我想知道当控制器收到内存警告时会发生什么。标量伊娃和记忆警告或查看unload

testBool将保持不变或将被重置?

class.h

@interface myView : UIViewController 
{ 
BOOL testBool; 
} 

回答

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将消失。

1

当您收到内存警告时,您需要对此做出反应。系统会尽力帮助你(需要时释放VC的视图并再次调用loadView/viewDidLoad),但你需要照顾所有的对象。

对象说起..如果你定义“BOOL *”这将是一个指针..我不认为你真的想这样(您需要分配一些内存,该内存地址分配给testBool这样你就可以用* testBool = YES/NO访问真正的标量值,并释放[self dealloc]上的这个内存)。

一般来说,可可内存管理只适用于OBJECTS。如果你用标量指针搞乱你,你必须处理内存(de)分配。你应该使用像NSNumber这样的标量ivars或基础类型。如果你使用ARC,你甚至不必关心内存管理(保留/释放)。只有当您收到内存警告时,您应该将nil分配给变量(ARC将处理内存管理)。

+0

Martin,我将BOOL指针上面的代码更新为BOOL标量。 – Adobels 2012-03-06 17:46:01

+0

马丁,如果我理解得好,我们不应该担心标量,因为可可管理只是关于对象。 – Adobels 2012-03-06 17:53:40

+0

是的,这就是我的意思:) – 2012-03-07 07:18:08