手动引用计数和 AutoRelease

Manual reference counting and AutoRelease

在手动内存管理中什么场景下会去自动释放

我想做好充分的准备,因为我即将进行一个不使用 ARC 的项目

当您需要从方法中 return 一个对象并同时放弃所有权时,您通常使用 autorelease:在 return 调用方(而不是创建方)方法)应该拥有该对象。

如果您只是在 returning 对象(使用 release)之前放弃所有权,它会立即被释放并且调用方无法使用它。如果您不调用 release,该对象从被调用函数(实例化它)中的引用计数为 +1,在调用方声明所有权后也没有进一步释放的机会。

所以,autorelease 就像一个“延迟释放”:对象在稍后的时间被发送一个释放方法(但不是在 returning 它的函数之前 returns).


附录:

另一种方法是 return 具有约定引用计数 1 的对象,并依靠调用方在完成后释放它。

这是通过为这些方法采用预先建立的命名模式来明确的:在 cocoa 中,它们通常包含单词“alloc”、“new”、“copy”或“mutalbeCopy”。

来源:Apple's documentation.