这基本上是一个意见问题,因此相当危险。
我的观点是可以学习基本的内存管理。资格在于不要被困在其中。通过一些非常简单的项目了解自动引用计数(ARC)正在为您做什么。一旦您基本了解如何处理内存管理,即如何避免保留环路(正如jemmons所暗示的,它们仍然可能是ARC的问题)。一旦您对内存管理有了基本的掌握,就可以开始使用ARC。
此外,正如Jason Coco所指出的那样,ARC会处理(简单地说)NSObject子类的内存管理。因此,如果您需要使用它们,则仍将自己处理所有CF对象。
有关ARC在幕后为您做了什么的优秀解释可以在 WWDC2011 Session 323 - Introducing Automatic Reference Counting 中找到。
但是还有一些其他考虑因素可能影响您的决定。
你需要目标设备吗?
如果您计划针对iOS 4.3及更高版本,则ARC可以有效地为您处理内存管理。(NSObject子类)
如果您计划针对iOS 4.2,则无法使用弱引用(您将使用unsafe_unretained)。因为仍有许多这些设备在使用中,如iPhone 3g和iPod touch 2nd gen,在该操作系统级别上受阻,因此许多开发人员仍在针对它们。
如果您计划针对早于4.2的(这将很少见),则绝对需要学习MRC(手动引用计数)。
如果您计划构建Mac应用程序,则该平台提供垃圾回收器。ARC也是一个选项(完全支持ARC 10.7,无弱支持10.6)。
retain
/release
做事情的方式已经过时,并且苹果认为ARC是未来。作为新的ObjC开发人员的第一课,您可能从中学到,与苹果游泳不利于您。
此外,虽然将旧的retain
/release
示例转换为ARC相当容易(大多数情况下,只需删除任何retain
、release
和autorelease
),但反之则不然。我已经看到了很多用ARC风格编写的示例代码。因此,作为刚开始学习的人,学习ARC方式更有价值。
请注意,这并不意味着您不需要理解引用计数。它仍然是对象生命周期的重要组成部分,您仍然需要了解这些内容(即使只是知道何时使用weak
或strong
引用)。但当编写代码时,请使用ARC。
“旧”风格就是使用引用计数来管理对象的生命周期。实际上并没有太多需要注意的,但是它容易出错,会带来各种问题。如果你刚开始学习编程,我个人建议你直接学习使用ARC。当你需要使用C库对象(例如CoreFoundation或CoreGraphics)时,你仍然需要处理引用计数。
苹果公司本身建议在新项目中使用ARC。
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html#//apple_ref/doc/uid/10000011i请阅读“一览”中的第2点。
Objective C和iOS中还有很多有趣的东西可以学习,除了内存管理之外。 我的建议:不要担心手动引用计数(MRR)。
仅仅是了解一下它的运作原理是个好主意,但对于开发来说并不是必要的。正如你所看到的,大多数开发者已经将他们的部署目标移至 iOS 5.0+,因此你可能不会在手动引用计数下进行开发。
然而,如果你计划在代码中使用非 ROP -retainable object pointers-,比如 CFStringRef,那么你可能需要真正地了解非 ARC,这样你就可以理解桥接等内容,因为你可以在一个项目中结合使用 ARC 和非 ARC 代码。