2011-07-30 42 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术语中,放弃对象的所有权因此通常被称为“释放”对象的 。

您不得放弃您不属于自己的对象的所有权这是 只是以前的政策规则的必然结果,明确指出。

一般,但是,你应该避免思维保留数方面,重点所有权。如果你拥有它,它取决于你释放它。