Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 垃圾收集是否用于生产质量的Cocoa应用程序?_Objective C_Cocoa_Garbage Collection - Fatal编程技术网

Objective c 垃圾收集是否用于生产质量的Cocoa应用程序?

Objective c 垃圾收集是否用于生产质量的Cocoa应用程序?,objective-c,cocoa,garbage-collection,Objective C,Cocoa,Garbage Collection,我主要想知道垃圾收集对性能的影响。发布应用程序是否不赞成使用垃圾收集 我能想到的另一个问题是,使用垃圾收集可能会导致编程更加草率 您在应用程序中使用垃圾收集吗?垃圾收集在许多生产质量应用程序中使用。Xcode、Automator、系统首选项和其他几个系统应用程序都是GC的,您可以预期这种趋势会随着时间的推移而继续 同样,许多开发人员已经接受了GC,并且只在他们的应用程序中使用它。例如,Intuit针对Mac的新版Quicken和QuickBooks是垃圾收集的 GC也有许多优点。从我的头脑和个人

我主要想知道垃圾收集对性能的影响。发布应用程序是否不赞成使用垃圾收集

我能想到的另一个问题是,使用垃圾收集可能会导致编程更加草率


您在应用程序中使用垃圾收集吗?

垃圾收集在许多生产质量应用程序中使用。Xcode、Automator、系统首选项和其他几个系统应用程序都是GC的,您可以预期这种趋势会随着时间的推移而继续

同样,许多开发人员已经接受了GC,并且只在他们的应用程序中使用它。例如,Intuit针对Mac的新版Quicken和QuickBooks是垃圾收集的

GC也有许多优点。从我的头脑和个人经验来看:

  • 它使多线程更容易;简单的赋值是所有权的原子声明

  • 它将大量内存管理工作转移到其他内核上;它自然是并发的,并从主线程(或计算线程)卸载大量计算

  • 在许多情况下,分配和解除分配可以完全在线程的上下文中进行,因此不需要全局同步或锁定

  • 随着Mac OS X的每一个版本,收集器的速度都在加快,这一趋势将继续下去(就像系统的其他部分一样)。通过将更多应用程序的计算负载卸载到系统提供的框架中,您的应用程序将从对底层系统的优化中获得越来越多的收益

  • 由于收集器对内存中的对象图(对象之间的指针)有着深入的了解,因此它使分析和调试变得非常容易。现在的问题不是“这个悬垂的指针是从哪里来的?”,而是“给我一个清单,说明为什么这个物体停留的时间比我认为的要长?”


这并不是说没有工作可以让您的应用程序在GC下以最佳方式工作。当然有这样的任务

垃圾收集从20世纪60年代开始出现,并在许多已发布的应用程序中使用。所有.NET应用程序都使用垃圾收集。苹果在Xcode中使用libauto

垃圾收集通常会使Cocoa中的应用程序质量更好,因为开发人员可以从内存管理负担中解脱出来。有大量的可可应用程序泄漏!(尽管它可能不会占用大量内存)


我倾向于使用gc,因为我可以更快地打开我的应用程序,而且不必担心消息传递僵尸对象

只要有可能,我就使用GC,因为最好的代码是您不必首先编写的代码。此外,正如Bbum在上文中指出的,在GC下运行意味着,如果需要调试任何瓶颈,您将有更多的信息可用于性能分析。

对于任何新的Cocoa应用程序,都建议使用垃圾收集,苹果通过在Xcode中使用垃圾收集来吃自己的狗粮。性能是一个有趣的情况,因为虽然总体上很可能会消耗更多的CPU周期,但由于收集器的多线程和访问器方法的简化,应用程序在某些方面可能会更快


计算机是为我们工作而制造的。Cocoa的引用计数通常很容易管理,但垃圾收集是它现在可以做的另一件事——让机器来完成工作,这样您就可以专注于重要的事情了

与其他人一样,我强烈建议使用GC。性能开销通常可以忽略不计!我不需要重复其他用户所说的好处

然而,我强烈建议编写库,而不是应用程序,也在非GC模式下运行。有些环境无法运行GC代码,iPhone是其中一个值得注意的环境;因此,如果您为自己创建了一个内部库,您希望以后在iPhone应用程序中重用它,那么我建议您将其设计为在非GC环境中也能工作


将GC代码转换为非GC代码要比其他方法困难得多

还有大量垃圾收集的应用程序泄漏。尽管有些环境(如iPhone和pre Leopard)不支持GC,但您可以在双模式下编译库。这需要一些额外的工作,但肯定是可能的。我自己也为开源的CHDataStructures框架做过这件事。@Quinn非常同意。然而,我澄清了我的帖子,指出我的意思是库应该被编写为在非GC环境中可用。值得注意的是,垃圾收集在10.8中已被弃用。现在值得注意的是,10.11将是OS X包含垃圾收集运行时的最后一个版本。使用垃圾收集的应用程序可能无法在10.12上正常运行或根本无法运行。