标量ivar&内存警告或viewUnLoad

时间:2012-03-06 09:35:42

标签: objective-c didreceivememorywarning

我有一个带标量ivars的UIViewController。我想知道当控制器收到内存警告时会发生什么。

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

class.h

@interface myView : UIViewController
{
BOOL testBool;
}

2 个答案:

答案 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会消失。