在Objective-C中,你需要在方法的结尾释放参数吗?

13

如果我将参数传递给一个方法,那么我需要在方法结束时释放该参数吗?

4个回答

72

不需要释放。考虑“NARC”:新分配、保留、复制。如果您没有执行这些操作中的任何一个,就不需要进行释放。


7
真的很棒。如果你用斯图奇的声音并且在分析代码的内存管理问题时想着“Narc narc narc”,它会非常有效。 - bbum
thyrgle - 没有人比我更惊讶!主要是因为我以为几乎每个人都知道NARC首字母缩略词。看来对许多人来说这是(好)消息! - Andiih

6
请阅读Cocoa内存管理指南。以下规则与您的问题相关:

如果您使用以“alloc”或“new”开头或包含“copy”的方法(例如,alloc、newObject或mutableCopy)创建对象,或者向其发送retain消息,则您将拥有该对象的所有权。您负责使用release或autorelease放弃您拥有的对象的所有权。在任何其他时间接收对象时,您不得释放它。

显然,您没有通过创建它们(在您的方法中)获得参数。因此,您需要担心的唯一部分是是否在方法中保留了它们。如果是,则必须释放或autorelease它们。如果没有,则不能释放或autorelease它们。

2

只有在方法中保留它们时,您才需要释放它们。惯例是,调用者负责确保作为参数传递的对象至少在调用处于活动状态时仍然存在。


0

除非您直接使用基础对象,否则现在应该将所有这些委托给ARC。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接