Objective-C ARC vs. MRR:为何切换?

时间:2011-12-18 21:45:37

标签: objective-c cocoa memory-management ios5 automatic-ref-counting

我是来自C#/ Java背景的新可可开发人员。我已经了解了Objective-c语言使用的内存管理模式,我发现它们非常有助于代码意识的开发。

为什么Apple现在希望我们使用ARC(自动引用计数)代替MRR(手动保留 - 释放)以及ARC提供的除节省时间之外的其他优势?

我认为这种转变会对开发商从对象生态系统中获得的良好公民习惯产生负面影响。

尼克

3 个答案:

答案 0 :(得分:12)

令人遗憾的是,让有能力的开发人员更容易纠正会产生副作用,让新开发人员更容易学习,但看起来它可能是值得的。

ARC 比C#或Java使用的跟踪收集器更不宽容。如果您没有明确的对象所有权模型,您几乎肯定会创建周期并泄漏大量内存。我希望这是显而易见的(通过仪器?仍然需要寻找它......不确定在这里可以做什么)新开发人员将很快学会保持他们的对象图清晰和非循环。

答案 1 :(得分:9)

ARC允许我专注于编写有用的代码而不是样板文件dealloc方法。

我认识的大多数人都在autorelease后面alloc使用了release,因为它后来为你节省了retain,你不能忘记实际把它放进去。因此,对象一直存在,直到自动释放池耗尽,并且使用ARC时,对象将在不再需要时被释放。我认为在这些情况下,ARC编译的程序甚至会使用更少的内存。

而且,羞辱我,它帮助我减少了我的应用程序崩溃。
每10,000次发布就会发生过早发布。那个我永远无法完全追踪的那个,希望与ARC一起成为过去。


  

我认为这种转变会对开发商从对象生态系统中获得的良好公民习惯产生负面影响。

可能与以汇编程序开始的嵌入式开发人员认为以C开头并且从未使用过汇编程序的人会陷入坏习惯的方式相同。

在我看来,MRR与ARC的讨论是相似的 ARC和C都允许在更短的时间内编写更易于维护的代码。 而且它们都可以带来更大的内存和CPU占用空间 如果我没记错的话,Apple宣布他们确实增加了release和{{1}}的速度,以弥补对cpu使用的影响。因此,MMR还没有真正的原因。

首先,我欢迎新的ARC领主。

答案 2 :(得分:2)

我真的很喜欢搬到ARC--这是一个值得思考的东西。最重要的是,我认为新手常常被命名约定(+ alloc,-copy etc vs [NSString stringWith ....])的重要性所绊倒。唯一棘手的一点是,当你开始处理CoreFoundation等(C API)时,你仍然要记住谁拥有什么。