iOS - 自动参考计数(ARC)与手动保留 - 释放(MRR)

时间:2012-05-07 10:11:44

标签: ios memory-management automatic-ref-counting

几个月前,当我开始为iOS开发应用程序(我是经验丰富的Java开发人员)时,我在iOS上经验丰富的同事警告我要远离ARC(因为他们声称它有点儿车)。现在我对MRR很满意。但是,如果确实值得,我想继续使用ARC。查看Apple的文档,"About Memory Management"。我找到了:

“如果您打算为 iOS 编写代码,则必须使用显式内存管理

所以我仍然很困惑是否要去ARC。我只关注iOS(不是Mac开发)。

感谢。

5 个答案:

答案 0 :(得分:12)

您的同事对iOS没有经验。 ARC不是马车。每个经验丰富的iOS开发人员都听说过ARC在批准条款时已经这么做了。我有超过三年的iOS经验,我强烈推荐ARC,只要你真正理解幕后发生了什么。 Apple自己,在你链接的指南中说:

  

强烈建议您将ARC用于新项目。

当Apple说您必须使用显式内存管理时,他们将传统的手动内存管理和ARC组合在一起作为显式内存管理,与垃圾收集相反。

另外,请注意您链接到Mac开发人员库中的文档,而不是iOS开发人员库。如果您需要为iOS开发,请使用iOS开发人员库。

答案 1 :(得分:2)

我个人的观点是,您应该开始学习使用ARC并在您自己的项目中实施它们(除非出于某种原因,您的客户/老板并不想要)。正在创建越来越多的库并将其转换为使用ARC。 Apple还建议您在自己的项目中使用ARC(参见Jim的回答)。虽然我必须坚持任何开始学习objective-c和iOS的人都应该熟悉传统的内存管理,然后再去ARC。另外,您可以查看此answer

答案 2 :(得分:2)

答案 3 :(得分:2)

我是一位经验丰富的程序员,但从我的角度来看,ARC可以节省大量时间,因为您不必担心retain / release个对象并实现{{ 1}}方法。此外,它还允许您根据对象图进行思考。在这种情况下,您需要注意应用程序中的循环。

那里有很多关于如何迁移到ARC的教程。这是我的最爱:

  1. http://www.mikeash.com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html
  2. http://blog.mugunthkumar.com/articles/migrating-your-code-to-objective-c-arc/
  3. 希望它有所帮助。

答案 4 :(得分:1)

如果您对MMR有经验并且可能意识到任务记忆管理可能会变得多么繁琐。使用ARC时,不需要保留和释放呼叫,不仅在许多情况下,ARC可以显着提高性能。

就个人而言,我觉得如果你在你的代码中使用了很多C库,那么ARC现在使用起来有点困难(所以如果你主要使用第三方C库和像CoreFoundation这样的东西,您可能会考虑是否有意义),但即便如此,如果这些库大多与您的Objective-C控制器隔离,那么ARC仍然很好。

请遵循以下指南:http://www.learn-cocos2d.com/2011/11/everything-know-about-arc/