iphone - 为什么保留/释放而不是新建/删除?

标签 iphone objective-c reference-counting

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

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

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

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

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

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

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

最佳答案

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

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

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

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

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

关于iphone - 为什么保留/释放而不是新建/删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6494227/

相关文章:

objective-c - 选择太多图像时 ELC Image Picker 出现问题 iPhone

php - PHP 引用如何在数组的底层工作?

sql - PostgreSQL 中的 "Reference counting"触发器

cocoa - 将变量插入 NSMutableArray 对象

iphone - 一个 UIView 中的许多小图像

ios - 通过填充 UIImageView 层的边框宽度的颜色来动画进度

python - Python 中引用计数作为垃圾收集方法会导致内存泄漏吗?

iphone - Xcode 4.2 在 IB 中的 Tab Bar 上放置导航 Controller 时发出警告

iphone - 使用适用于iPhone/iPad应用程序的应用程序的所有可能方法

objective-c - NSOpenPanel 崩溃?