2009-04-24 49 views
1

某處我正在閱讀,當我因爲內存不足警告而放棄臨時視圖(一旦用戶想要看到它時再次加載它),我會遇到內存問題,如果ViewController類不做這樣的事情該視圖上的每一個出口:關於低內存警告,我在多視圖應用程序中需要考慮什麼?

-(void)dealloc { 
    [myView release], myView = nil; 
    [myLabel release], myLabel = nil; 
    [super dealloc]; 
} 

我在這裏感到困惑,因爲實際上我認爲[MyView的發行]也會使未繳的事情,說變量保存沒有對象了。爲什麼兩次?還是有我錯過的東西?

回答

5

調用[myView release]不會改變的myView值時,它遞減對象的保留計數myView點(當一個對象的保留計數爲零,它dealloc S本身)。在調用[myView release]之後,myView仍然包含視圖對象的地址,但是如果myView是唯一所有者,則該對象具有自己編輯並且內存不再有效(並且我現在被另一個對象或其他數據佔用)。通過將myView設置爲nil,確保您不會意外使用原來屬於myView的內存,現在可以測試myView是否已被初始化或丟棄。

請注意,您不需要設置myViewnil-dealloc方法,因爲你的視圖控制器在這一點上消失,無論如何,但是你想這樣做,如果你丟棄在響應您的視角以低記憶警告。如果其視圖不可見,則可能會考慮放棄整個視圖控制器。

+0

謝謝。所以如果出現內存不足的警告,我會寫[myView release],myView = nil;在低內存警告事件處理程序方法內?或者self.myView = nil只是以同樣的方式工作? – Thanks 2009-04-24 17:10:37

0

當視圖控制器獲取內存警告並且視圖不在屏幕上時,它可能會將視圖屬性設置爲零。但是,這不會發布任何您可能保留在其他屬性中的子視圖。所以你可以這樣處理:

- (void)setView:(UIView *)view 
{ 
    [super setView:view]; 
    if (view == nil) 
    { 
    // Release-and-nil any subviews that you might be retaining. 
    } 
} 
相關問題