我有一个UIViewController与标量ivars。我想知道当控制器收到内存警告时会发生什么。标量伊娃和记忆警告或查看unload
testBool将保持不变或将被重置?
class.h
@interface myView : UIViewController
{
BOOL testBool;
}
我有一个UIViewController与标量ivars。我想知道当控制器收到内存警告时会发生什么。标量伊娃和记忆警告或查看unload
testBool将保持不变或将被重置?
class.h
@interface myView : UIViewController
{
BOOL testBool;
}
不,它不是会被释放,当你收到一个警告,只是
- (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将消失。
当您收到内存警告时,您需要对此做出反应。系统会尽力帮助你(需要时释放VC的视图并再次调用loadView/viewDidLoad),但你需要照顾所有的对象。
对象说起..如果你定义“BOOL *”这将是一个指针..我不认为你真的想这样(您需要分配一些内存,该内存地址分配给testBool这样你就可以用* testBool = YES/NO访问真正的标量值,并释放[self dealloc]上的这个内存)。
一般来说,可可内存管理只适用于OBJECTS。如果你用标量指针搞乱你,你必须处理内存(de)分配。你应该使用像NSNumber这样的标量ivars或基础类型。如果你使用ARC,你甚至不必关心内存管理(保留/释放)。只有当您收到内存警告时,您应该将nil
分配给变量(ARC将处理内存管理)。
Martin,我将BOOL指针上面的代码更新为BOOL标量。 – Adobels 2012-03-06 17:46:01
马丁,如果我理解得好,我们不应该担心标量,因为可可管理只是关于对象。 – Adobels 2012-03-06 17:53:40
是的,这就是我的意思:) – 2012-03-07 07:18:08