2

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

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

也许我的大脑只适合 new/delete 内存管理,我不明白为什么我应该管理引用计数,我想我知道什么时候对象必须是 alloc/dealloc 与我的 C++ 经验。

(是的,我花了 4 个小时调试引用计数问题,通过 1 行“发布”解决)

当我们使用参考计数器时,谁能解释我什么更好?(在编程语言方面)我认为我可以通过新建/删除来管理对象的生命周期,但我不能使用引用计数。

如果您有链接,我需要长篇文章来解释为什么引用计数器很有用。

PS:我在 WWDC 2011 上听说过 Compile-time Automatic Reference Counting,它真的很棒,例如可能是使用了引用计数器的原因。

4

1 回答 1

8

简短的回答是,它是一种管理对象生命周期的方法,而无需像使用 C++ 那样需要“所有权”。

在 C++ 中使用创建对象new时,必须知道delete稍后何时创建该对象。这通常很简单,但是当一个对象可以被许多具有不同生命周期的不同“所有者”传递和共享时,这可能会很困难。

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

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

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

于 2011-06-27T14:18:17.557 回答