0

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

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

类.h

@interface myView : UIViewController
{
BOOL testBool;
}
4

2 回答 2

1

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

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

通常,可可内存管理仅适用于 OBJECTS。如果你乱用指向标量的指针,你必须自己处理内存(取消)分配。您应该使用标量 ivars 或 NSNumber 之类的 Foundation-Types。如果您使用 ARC,您甚至不必太在意内存管理(保留/释放)。只有当您收到内存警告时,您才应该分配nil给变量(ARC 将处理内存管理)。

于 2012-03-06T09:44:13.283 回答
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 肯定会消失。

于 2012-03-06T09:39:53.623 回答