2011-06-27 36 views
0

如果自定義視圖基於條件if向其自身添加了幾個子視圖,並且稍後在該視圖上調用了setNeedsDisplay,而該條件不再是true並且因此這些子視圖不會被創建,是自動從其自動釋放的「舊」子視圖記憶在drawRectsetNeedsDisplay發佈子視圖?

或者,我應該擔心檢查是否存在子視圖,然後釋放它們,然後setNeedsDisplay

我想最終我的問題是關於setNeedsDisplay的內存影響,如果它有效地從內存中刪除舊視圖及其子視圖,然後從根本上重新創建視圖?

回答

1

-setNeedsDisplay只是設置一個標誌,表示「此視圖需要重繪。」據我所知,它不保留或釋放任何東西,或添加或刪除任何子視圖。

我不確定你想要做什麼,但聽起來你太擔心了。 Call -setNeedsDisplay當你的應用程序的狀態發生改變時,需要重繪一個給定的視圖。如果隨後從視圖層次結構中刪除該視圖,則不應該導致任何問題。

+0

我想我需要知道的是,如果視圖將使用-setNeedsDisplay進行重繪,那麼該視圖的任何子視圖佔用的內存會在-setNeedsDisplay之後不再繪製?我想知道如果我不得不擔心管理將不再存在的子視圖的內存。 – johnbakers

+0

首先,-setNeedsDisplay僅標記重繪的視圖,它實際上不執行任何繪製。根據應用中發生的情況,在實際重繪視圖之前,可以調用-setNeedsDisplay十幾次。其次,當調用-drawRect時,視圖將具有子視圖或不具有子視圖。如果有的話,那些將被繪製。如果不是,他們不會。第三,如果您從超級視圖中移除視圖,則超級視圖將釋放它。最後,不要從inside -drawRect:中刪除子視圖。如果這還不清楚,也許你可以發佈一些代碼或進一步描述情況。 – Caleb

+0

好的,謝謝。我想在添加一些代碼並做一些重要工作之前瞭解這個過程。目前,我有一個由drawRect調用的方法。在那個方法中,我打算添加一個'addSubview'的代碼 - 當setNeedsDisplay重繪視圖時,它聽起來像即使該方法由於條件改變而不再是'addSubview',這些子視圖事實上仍然會出現在屏幕上,因爲setNeedsDisplay會沒有擺脫他們。 – johnbakers