2011-10-17 70 views
0

我努力以非常乾淨的方式解決涉及內存過載(管理)的問題。 具有視系列包括其它視圖IM,在項目中,我有這樣的情況:iOS設計模式內存管理與委託和父對象

的MainView

| _PageView

| _CustomButton

洙遠遠洙好,易爲一塊蛋糕。由於某種原因,CustomButton中有一個委託(協議),所以我們在PageView中創建了N個CustomButtons,在PageView(PageVew extend CustomButtonDelegate)中將代理設置爲self,並釋放按鈕並將它們附加到像

{ 
CustomButton *customButton_ = [[CustomButton alloc] initWithFrame:CGRectMake(100.0,50+(i*55.0),200.0); 
customButton.delegate = self; 
[self addSubView:customButton_]; 
[customButton_ release]; 
} 

soo far soo good again。按鈕將被按下,PageView獲得協議方法,執行一些代碼並完成。一個問題是,在一個點上,的MainView必須刪除網頁瀏覽,那麼在方法我請

[pageView_ removeFromSuperview]; 
[pageView release], pageView_ = nil; 

pageView_ = [PageView alloc] initWithFrame.....]; 

和我重新創建與其他數據來顯示該對象。 我注意到PageView永遠不會釋放並從內存中刪除,因爲它的retainCount正是我​​在PageView中創建的CustomButton的數量,並將它分配給自我加上一個當然。我的問題是,什麼是最乾淨的方式來安全地刪除所有的對象,並能夠刪除PageView,釋放內存(因爲我加載了相當大量的數據顯示在其中)?

現在我做:

創建一個瀏覽量NSMutableArray裏,我的CustomButton對象在 它,和之前刪除網頁瀏覽,我循環,並設置委託=零,然後鬆開每個 對象,我釋放NSMutableArray(稱爲「持有人」)後。

但問題是,如果我想與其他協議添加更多的不同類型的對象,添加到此數組,可能會導致保留對象的其他問題。

我在哪裏缺少傢伙,知識,所以我需要更多的學習(很確定我可以說)還是需要與另一個OOD進行交流?

謝謝你們,即時超負荷與這個問題,我的大腦被困在一個接近的道路。 :)

+0

如何聲明並實現CustomButton類的委託屬性? – murat

回答

3

看起來像你的CustomButton的代表是CustomButtonretain財產。代表應該是assign財產,而不是retaincopy。見here