2009-07-11 135 views
1
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    AViewController * aView = [[AViewController alloc] initWithNibName:@"myNib" bundle:[NSBundle mainBundle]];  
    return vintagePriceRowView.view; 
} 

我知道這段代碼需要釋放...某處。但是哪裏?如果我將分配的AviewController設置爲自動釋放,那麼觸摸視圖中的元素將導致「發送到釋放實例0xfb5780的消息」將元素放置到UITableView頁腳中,何時釋放它們?

泄漏儀器實際上並未顯示泄漏,但顯然Clang不喜歡上述代碼。我知道Clang不是福音,只要確定代碼中可能出現錯誤的所有內容即可,但在這種情況下,感覺可能是正確的。我已經分配了它,我需要釋放它。

關於我在做什麼的錯誤?

回答

2

爲了提高效率,您應該創建一個視圖,在需要之前在頁腳中使用該視圖。也許在你的tableViewController的viewDidLoad中創建它,並將它存儲在一個成員變量中。

然後在您的viewForFooter方法中,只需返回先前存儲的視圖。

然後在你的tableViewController的dealloc方法中,釋放視圖。

1

你需要堅持到它不再需要。

我建議製作一個私有屬性,最初將其設置爲nil,然後延遲加載該筆尖並將返回的視圖分配給該屬性。然後在deallocviewDidUnload中通過設置器簡單地將其設置爲nil

一旦您將其分配給私有屬性,您將需要releaseautorelease,因爲setter將爲您保留它。

相關問題