为什么要保留/释放而不是新/删除?

时间:2011-06-27 14:13:47

标签: iphone objective-c reference-counting

我是Objective-C的新手,我觉得C ++很合适。

我的问题是: 为什么obj-c的语言设计者适合使用retain / release而不是仅使用new / delete(= alloc / dealloc)?

也许我的大脑适合新的/只删除内存管理,我无法理解为什么我应该管理引用计数,我想我知道什么时候对象必须是我的C ++经历的alloc / dealloc。

(是的,我花了4个小时来调试引用计数问题,它由1行“释放”解决)

当我们使用参考计数器时,有人能解释一下哪个更好吗? (在编程语言方面)我认为我可以通过new / delete来管理对象的生命周期,但是我不能用引用计数。

如果你有链接,我需要很长的文章来解释为什么参考计数器很有用。

P.S:我在WWDC 2011上听说过编译时自动引用计数,它真的很棒,例如,它可能是使用参考计数器的原因。

1 个答案:

答案 0 :(得分:8)

简短的回答是,这是一种管理对象生存期的方法,而不像C ++那样需要“所有权”。

在C ++中使用new创建对象时,必须知道以后何时delete该对象。这通常是直截了当的,但是当一个物体可以被许多不同的“拥有者”传递和共享时,它可能很难。

通过引用计数,只要任何其他对象引用该对象,它就会保持活动状态。当所有其他对象删除其引用时,它将消失。这种方法有缺点(保留/释放和参考周期的调试最明显),但它是全自动垃圾收集的有用替代方法。

Objective-C不是唯一使用引用计数的语言。在C ++中,通常使用std::shared_ptr,这是标准的引用计数智能指针模板。 Windows组件对象模型编程需要它。许多语言在幕后使用自动引用计数作为垃圾收集策略。

维基百科的文章是开始寻找更多信息的好地方:http://en.wikipedia.org/wiki/Reference_counting