手动内存管理VS ARC

Joh*_*igs 4 cocoa objective-c

我正在读一本关于Objective C的书,我想知道两件事:

1.我现在应该花时间阅读关于内存管理的整章,因为我们主要使用ARC吗?(只是问这个问题以确保我正确地管理时间)

2.如果您在人工管理方面做得非常出色,您可以获得比使用ARC更好的性能吗?(就像你的应用程序将更快地工作)

TNX

das*_*ght 5

  1. 您至少应该熟悉手动内存管理的基本概念,因为ARC使用它.你至少需要了解三两件事:retain,release,和autorelease.这将有助于您了解有关ARC内部工作的讨论.
  2. ARC主要是编译技巧(在运行时有一些支持).您可以编写更少的代码,但无法从中获得更好的性能.从本质上讲,ARC允许您以声明方式处理内存管理,而手动管理则使用命令式样式.但是,两个系统都从运行时调用相同的方法.

  • ARC实际上可以在各种情况下让你的表现越来越好.更好的性能是由于它可以在人类无法使用的情况下删除自动释放的非常聪明的技巧(参见'callerAcceptsFastAutorelease'这里:http://opensource.apple.com/source/objc4/objc4-493.9/runtime/objc -arr.mm).缓慢是因为当ARC无法绝对确定时,它会因额外的保留和释放而出错以确保安全.但在*大多数情况下,ARC应该是性能中立的. (4认同)
  • 在性能角度上还有更多的东西.首先,正如引入ARC的WWDC会议之一所述,`@ autoreleasepool`(MRC和ARC都可用)比NSAutoreleasePool更快.其次,ARC的一些行为可以减少对象的生命周期,这可以降低应用程序的内存高水位标记,从而减少导致页面输出的变化.页面输出是一个系统范围的减速带,因此在某种意义上,避免它们是速度增益.(此外,在iOS上,使用太多内存会导致您的进程被终止,因此避免这种情况会获得更大的收益.) (3认同)
  • @JohnBigs ARC的美妙之处在于它不会让你放弃任何控制:如果你想尽早释放一个物体,你可以"指出"强制删除它的指针; 如果你需要排空自动释放池,你可以使用新的`@ autorelease`结构,依此类推. (2认同)