2012-03-06 17 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