2009-05-24 49 views
3

我有一些UIImageViews嵌套在UIViews中,它們將它們組合在一起。他們擁有一個視圖控制器。一旦調用了-viewWillDisappear方法,我想要將這些UIImageViews與它們的UIViews一起移除,以便內存得到釋放。如何通過從屏幕上刪除UIImageViews來安全釋放內存?

我在包含UIImageViews的子視圖的UIView上調用了-release。沒有其他人擁有UIImageViews。我所擁有的是UIView的實例變量,它將UIImageViews分組在一起。

所以當我發送-release給它時,保留計數應該變爲0.但這並不能保證我獲得更多的空閒內存,對嗎?所以,我也設置了myUIView = nil。這有幫助/有用嗎?你如何安全地釋放內存?

回答

3

-viewDidDisappear(而不是-viewWillDisappear;你仍然在屏幕上)最好的事情是要撥打self.view = nil。這將轉儲整個視圖控制器的視圖,該視圖將在下次需要時自動重新加載。

如果您對這些視圖有任何IBOutlet,則您需要將它們設置爲零,否則它們將不會釋放。假設你有這樣的設置:

@interface MyViewController : UIViewController 
{ 
    UIImageView *_imageView; 
} 
@property (readwrite, retain) IBOutlet UIImageView *imageView; 

@implementation MyViewController 
@synthesize imageView = _imageView; 

然後你需要調用self.imageView = nil在`-viewWillDisappear。

通常應該不叫你的高德-release除了在他們的存取和-dealloc。釋放它們的正確方法是使用訪問器將它們設置爲零。

Caling -release當retainCount爲1時會立即調用free(),這將恢復內存。但請記住,其他事情可能會保留該對象,包括自動釋放池,因此您可能無法確定在任何給定時間的保留計數。

我強烈建議人們,當他們釋放一個變量,立即將其設置爲零。這不影響變量;它只是保護你免於追逐你已經發布的指針,所以現在可能指向未分配的內存。因此,在-dealloc,我看起來像這樣的臺詞:

[_stuff release]; _stuff = nil; 
[_otherStuff release]; _otherStuff = nil; 
+0

「那你就需要調用self.imageView =零在`-viewWillDisappear」 >>>你真的不與-viewDidDisappear? – Thanks 2009-05-24 17:50:58

相關問題