2011-07-30 39 views
2

我使用initWithNibName來加載詳細信息視圖。我只是在想這些東西是否需要發佈呢? init基本上增加了1的保留計數?initWithNibName需要發佈

回答

5

@Mel:

是的,你需要釋放它們。

從蘋果公司的Doumentation A部分:

你擁有的任何對象創建

您創建使用名稱以「黃金」,「新」,「複製」對象的方法,或「mutableCopy」(例如,alloc,newObject或mutableCopy)。

但是,它與initWithNibName沒有任何關係,但它與分配'mutableCopy','copy','retain'和'alloc'的內存有關。所以希望現在你很清楚。

init關鍵字只是初始化一個對象。內存分配做雖然allocretaincopymutableCopy關鍵字

而且你正在談論的1擋計數是因爲alloc關鍵字,而不是initWithNibName的。

希望這可以幫助你。

+0

當然,你也可以用[NSMutableArray數組]來創建一個對象,但是你不需要'釋放'它。區別在於用'retain'(alloc/copy/et al)創建的對象和用額外的'autorelease'(幾乎所有其他)創建的對象之間的區別。 –

5

是的。閱讀this section。以init...開頭的任何內容都會爲您提供一個您擁有的對象。

+4

Nit:「init ...」不會創建對象。 「alloc」創建對象,「init ...」初始化它,並且我相當肯定(但不確定)它是保留對象的「alloc」。但是(除非在非常奇怪的情況下)你不能沒有另一個,所以你的陳述在大多數情況下足夠接近真相。 –

+0

好吧,我將「創建」更改爲「給你」。滿足? – Yuji

+0

滿足一頭母牛。 –

2

有問題的部分:在創建 您使用的方法 名稱以「黃金」,「新」,「複製」創建一個對象,或「

你擁有的任何對象mutableCopy「(對於 示例,alloc,newObject或mutableCopy)。

您可以使用保留 一個物體的所有權接收的對象通常是保證它收到 方法內仍然有效,而且方法也可以安全地將對象返回到它的調用。 [...]

當你不再需要它,你必須放棄一個對象 的所有權你自己 您通過發送釋放 消息或自動釋放消息的放棄對象的所有權。在Cocoa術語中,放棄對象的所有權因此通常被稱爲「釋放」對象的 。

您不得放棄您不屬於自己的對象的所有權這是 只是以前的政策規則的必然結果,明確指出。

一般,但是,你應該避免思維保留數方面,重點所有權。如果你擁有它,它取決於你釋放它。