在objective-c中释放对象的正确方法是什么

时间:2011-10-24 06:27:54

标签: iphone objective-c release

我必须确认一些事情。 我以这种方式发布我的对象。

[lblTotalQty, lblTotalAmt, imgEmptyBag, lblEmptyBagMsg release];

这不是一个正确的方法吗?

请指导我。

3 个答案:

答案 0 :(得分:6)

逗号操作符将丢弃除最后一个之外的所有表达式,因此您的语句实际上将变为

[lblEmptyBagMsg release];

所以你不应该按照你在问题中指出的方式发布对象。单独进行,即分别对每个对象进行释放。

答案 1 :(得分:1)

很难说出你在这里问的是什么,因为你没有给出任何背景信息。

首先,我从未见过有人使用逗号分隔的标识符列表来发送单个消息,正如您在示例中所做的那样...但我认为这不是问题的关键点。

除了使用自动释放池之外,向对象发送release消息是唯一方式释放它们。

释放对象的困惑通常更多的是“何时”而非“如何”的问题。每个人都知道“如何”(致电release)。更大的问题通常是“何时应该释放或保留一个物体”。

答案 2 :(得分:0)

关于 如何 ,您可以通过发送发布消息来释放对象:

[myObject release];

之前从未见过逗号语法,有人建议只发送最后一个对象的消息(任何人都可以确认这个吗?)

关于 何时 ,这是一个很长的故事,我建议你阅读Apple关于这个主题的文档; 你可以开始here

基本上,您必须跟踪对象所有权,以避免两方取消分配同一对象两次,或相反,永远不会。

一开始听起来很麻烦,但在软件设计方面这是一个非常好的做法;此所有权层次结构为您的代码带来了有意义的结构。

或者, IF 您正在为Mac编码,您可以使用垃圾收集。此外,如果您正在编写iOS 5.0+并开始一个新项目,您可以利用新的ARC(自动引用计数)功能,该功能基本上是由编译器自动生成的手动引用计数代码:两者中的最佳选择世界。