moo*_*nce 2 iphone reference-counting objective-c
我是Objective-C的新手,我觉得C++很有用.
我的问题是: 为什么obj-c的语言设计者适当使用retain/release而不是仅使用new/delete(= alloc/dealloc)?
也许我的大脑适合新的/删除只有内存管理,我无法理解为什么我应该管理引用计数,我想我知道什么时候对象必须与我的C++经历alloc/dealloc.
(是的,我花了4个小时来调试引用计数问题,它由1行"释放"解决)
任何人都可以解释一下,当我们使用参考计数器时哪些更好 (在编程语言方面)我认为我可以通过new/delete来管理对象的生命周期,但是我不能用引用计数.
我需要一篇长篇文章来解释为什么参考计数器很有用,如果你有链接的话.
PS:我在WWDC 2011上听说过编译时自动引用计数,它真的很棒,例如,它可能是使用参考计数器的原因.
简短的回答是,这是一种管理对象生命周期的方法,而不像C++那样需要"所有权".
new在C++中使用创建对象时,必须知道以后何时使用delete该对象.这通常是直截了当的,但是当一个物体可以被许多不同的"所有者"传递和共享并且生命周期不同时,这可能很困难.
通过引用计数,只要任何其他对象引用该对象,它就会保持活动状态.当所有其他对象删除其引用时,它将消失.这种方法有缺点(保留/释放和参考周期的调试是最明显的),但它是全自动垃圾收集的有用替代方案.
Objective-C不是唯一使用引用计数的语言.在C++中,它是常用的std::shared_ptr,它是标准的引用计数智能指针模板.Windows组件对象模型编程需要它.许多语言在幕后使用自动引用计数作为垃圾收集策略.
维基百科的文章是开始寻找更多信息的好地方:http://en.wikipedia.org/wiki/Reference_counting