2011-08-12 47 views
3

以下哪項是正確的?我應該保留從makeViewWithIdentifier返回的視圖:owner:?

NSTableCellView *cell = [outlineView makeViewWithIdentifier: [tableColumn identifier] owner: self]; 
// Do stuff… 
return cell; 

NSTableCellView *cell = [[outlineView makeViewWithIdentifier: [tableColumn identifier] owner: self] retain]; 
// Do stuff… 
return cell; 

我很困惑,因爲makeView…方法返回一個自動釋放的視圖,而表視圖仍然存在表視圖細胞無法釋放。表格視圖是否保留了單元格本身?

非常感謝!

回答

3

由於您沒有指定,我假設這段代碼來自您執行NSTableView‑tableView:viewForTableColumn:row:委託方法。

如果是這種情況,那麼表格視圖對單元格做什麼並不重要,因爲單元格的所有權不是您的問題。您的責任是符合方法簽名隱含的內存管理規則,在這種情況下,委託方法返回自動釋放對象,因爲它不包含單詞newcopy。因此,你需要返回一個自動釋放對象。在你的情況下,這是cell實例。

+0

那麼,NSTableView是否保留了單元? (順便說一下,一切正常,我只是想確定。):-) –

+1

嗯,它可能會,但我的觀點是,這並不重要。這不是你的責任,你只需要履行你正在實施的方法命名中隱含的內存管理合同。 –

+0

謝謝你的幫助! –

相關問題