2011-05-24 71 views
0

我無法找到我釋放對象的原因。在什麼情況下,當它的超視圖沒有被查看時,uiview對象會被釋放?Dealloc調用UIView子類

背景: 對象ObjectA是UIView的一個子類,在UITableView的一個子類TableA中在tableHeaderView中被子查看。 TableC是TableB的子類,它是TableA的子類。

的UITableView ==>表A(對象A在這裏實例化的tableHeaderView)==>表B ==>表C

我目前在表C三個部分,一切工作正常。如果我添加第4部分,則在ObjectA上調用dealloc。

+4

很難說沒有代碼,爲什麼你得到內存錯誤。 – 2011-05-24 20:29:49

+0

當您滾動表格時,單元格可能會被釋放。但正如@Deepak所說,沒有看到代碼就很難找到錯誤。 – pgb 2011-05-24 20:33:29

+0

這個視圖是在標題視圖中,所以如果子視圖仍然有一個超級視圖,不應該調用dealloc嗎? – prostock 2011-05-24 20:59:23

回答

1

如果不是您即將發佈視圖,通常會在超級視圖卸載或交換內容視圖時發生 - 也就是說,當您從子視圖中刪除子視圖時,子視圖將發送release消息(因爲子視圖由其父視圖保留)。

-[MONSubview dealloc]中設置斷點並檢查跟蹤應該使原因明顯,儘管如果您的視圖在自動釋放池被銷燬時被釋放,然後跟蹤將無用,它可能離調用站點數英里。

1

-dealloc在任何時候都會被調用,只要它被保留,分配或複製,對象被釋放多次。就這麼簡單。

如果您的視圖被釋放,即使它仍然是另一個視圖的子視圖,您可能會在某處過度釋放視圖。