如何知道对象是否自动释放?

时间:2009-09-23 15:10:50

标签: objective-c autorelease

在我不知情的情况下,我对一些被自动释放的物体感到有些恼火。它们可能是一件好事,但如果它们是,我想知道。文档没有说明哪些方法是自动释放对象,所以我通常会测试我的前进方向,这在我看来是愚蠢的。例如,[NSDate date]自动释放对象,[NSArray arrayWithObjects:...]也是如此。如果没有文件告诉你,你怎么知道?

我开始看到一个模式虽然像这样的方法,那些用静态函数创建对象的方法总是返回自动释放的对象。这总是如此吗?

2 个答案:

答案 0 :(得分:21)

基本上,如果您initcopyretain您负责释放它。如果不这样做,则不负责发布它。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

  

许多类提供了方法   form + className ...你可以使用   获取该类的新实例。   通常被称为“便利性”   构造函数“,这些方法创建了一个   该类的新实例,初始化   它,并返回给你使用。   虽然你可能认为你是   负责释放物品   以这种方式创造,但事实并非如此   根据所有权的情况   政策早先提出。因为   class创建了新对象   负责处理新的   对象

答案 1 :(得分:4)

方法签名本身告诉你。具有“classNameWithData:data1:data2”等签名的方法的模式是返回该东西的alloc / init / autorelease实例。它们是方便的,所以你不必这样做。

如果你不想要某个东西的自动释放版本,那么不要那样实例化它们,并使用正确的alloc / init,并在你完成后释放。这种方法更明确,更容易出错,因为如果抛出异常,你的发布块可能会被遗漏,但这就是你为这种方式付出的代价。

相关问题