我有一個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