0
如果自定義視圖基於條件if
向其自身添加了幾個子視圖,並且稍後在該視圖上調用了setNeedsDisplay
,而該條件不再是true
並且因此這些子視圖不會被創建,是自動從其自動釋放的「舊」子視圖記憶在drawRect
?setNeedsDisplay發佈子視圖?
或者,我應該擔心檢查是否存在子視圖,然後釋放它們,然後setNeedsDisplay
?
我想最終我的問題是關於setNeedsDisplay
的內存影響,如果它有效地從內存中刪除舊視圖及其子視圖,然後從根本上重新創建視圖?
我想我需要知道的是,如果視圖將使用-setNeedsDisplay進行重繪,那麼該視圖的任何子視圖佔用的內存會在-setNeedsDisplay之後不再繪製?我想知道如果我不得不擔心管理將不再存在的子視圖的內存。 – johnbakers
首先,-setNeedsDisplay僅標記重繪的視圖,它實際上不執行任何繪製。根據應用中發生的情況,在實際重繪視圖之前,可以調用-setNeedsDisplay十幾次。其次,當調用-drawRect時,視圖將具有子視圖或不具有子視圖。如果有的話,那些將被繪製。如果不是,他們不會。第三,如果您從超級視圖中移除視圖,則超級視圖將釋放它。最後,不要從inside -drawRect:中刪除子視圖。如果這還不清楚,也許你可以發佈一些代碼或進一步描述情況。 – Caleb
好的,謝謝。我想在添加一些代碼並做一些重要工作之前瞭解這個過程。目前,我有一個由drawRect調用的方法。在那個方法中,我打算添加一個'addSubview'的代碼 - 當setNeedsDisplay重繪視圖時,它聽起來像即使該方法由於條件改變而不再是'addSubview',這些子視圖事實上仍然會出現在屏幕上,因爲setNeedsDisplay會沒有擺脫他們。 – johnbakers