2011-10-28 63 views
0

我在iOS應用程序中使用繪圖進行遊戲。我有一個類是UIView的子類,它繪製了一些線條和東西。當用戶按下一個按鈕時,我實例化該類,並在應用程序的主要視圖UIViewController上執行addSubView。用戶按下該按鈕的次數越多,該類的更多實例就會被添加到視圖中。它工作得很好。從removeFromSuperview刪除/釋放UIView的適當方法

現在我想爲用戶提供一種刪除其中一個視圖的方法。到目前爲止,我已將[self removeViewFromSuperview]納入自定義UIView的touchesBegan方法中。因此,當用戶按下繪圖時,它將從視圖中移除。但是,它並沒有被刪除,對吧?由於視圖是在按下按鈕時執行的方法中實例化的,所以我無法從UIViewController中引用它。有什麼合適的方法確保我不會浪費已創建和刪除的UIView的記憶?

在相關說明中,如果要在切換刪除的主窗口UIView上放置一個切換開關,如果該切換開關設置爲delete = yes,如何從touchesBegan中進行檢查?我可以在AppDelegate中找到某種布爾變量,我可以從UIView子類中檢查嗎?我將如何參考?

感謝你的幫助,
有狀態

+0

你是如何創建UIView的? –

回答

4

移除它,內存泄漏:

[theViewAboutToBeRemoved removeFromSuperview]; 

關於UISwitch,你並不需要保持其價值的任何地方,除非你需要別的東西。您可以直接訪問它的值:

if ([theSwitch isOn]) { ... } 

你甚至都不需要一個IBOutlet,你可以用它的標籤訪問交換機:

UISwitch *theSwitch = (UISwitch *)[view viewWithTag:<# switch tag number #>]; 
if ([theSwitch isOn]) { ... } 

在這種情況下,你必須設置一個獨特的標籤號碼Interface Builder中的開關或創建它時。

0

當你做[MAINVIEW addSubView:MyView的],MAINVIEW將保留MyView的。如果你用alloc/init創建了myView,那麼你也保留它。如果在將它添加到主視圖後不需要myView,那麼只需在添加它之後執行[myView發佈]。當你從主視圖中刪除它時,它將被釋放和釋放。

0

如果您使用alloc/init創建UIView,將其添加到超級視圖然後釋放視圖,超級視圖將保留它。當它與removeViewFromSuperview一起被刪除時,它將被釋放。

0

我通常會在添加視圖後自動釋放視圖,並將父視圖作爲唯一引用。

至於檢查切換,您可以添加一個IBOutlet,以便您可以直接檢查它。

UIView *viewBeingAdded = [[[UIView alloc] init] autorelease]; 
[view addSubview:viewBeingAdded]; 

您可以:如果您添加的看法是這樣的(這可能不是單純的MVC,但我不知道,如果把它放在[UIApplication的sharedApplication] .delegate必然是清潔的。)

相關問題