Objective c 为什么垃圾收集在Objective C2.0中可用,但在Cocoa Touch中不可用

Objective c 为什么垃圾收集在Objective C2.0中可用,但在Cocoa Touch中不可用,objective-c,cocoa-touch,garbage-collection,Objective C,Cocoa Touch,Garbage Collection,我提出的这个问题当然不是说“他们为什么不让cocoa touch也可以使用垃圾收集”,而是说,我想了解自2.0发布以来,cocoa touch没有GC,而Objective-C有GC的情况。这不仅仅取决于语言吗 从ios 5开始(每点4.3),Cocoa Touch具有自动参考计数功能。如果您愿意,编译器基本上会为您保留发布内容。但是不,它不依赖于语言,它依赖于平台 苹果没有使用Mac-GC的原因很简单:ios设备上没有太多内存,Mac-GC也不如其他一些设备,比如说Java 另一方面:我知道W

我提出的这个问题当然不是说“他们为什么不让cocoa touch也可以使用垃圾收集”,而是说,我想了解自2.0发布以来,cocoa touch没有GC,而Objective-C有GC的情况。这不仅仅取决于语言吗

从ios 5开始(每点4.3),Cocoa Touch具有自动参考计数功能。如果您愿意,编译器基本上会为您保留发布内容。但是不,它不依赖于语言,它依赖于平台

苹果没有使用Mac-GC的原因很简单:ios设备上没有太多内存,Mac-GC也不如其他一些设备,比如说Java


另一方面:我知道WTF很容易对iOS的内存管理模式产生近乎冲动的反应,但是,开发人员掌握了大量的能力/控制能力,这是一个很好的方法,可以用来解决C和更低级别编程带来的内存管理问题。

您并不是在问为什么iOS上不提供垃圾收集。相反,您要问的是,垃圾收集有时在一种语言中可用,有时不可用

在一个层面上,答案很简单。苹果只是没有在iOS运行时包含垃圾收集代码。基本上,存在在Mac上运行的实现垃圾收集的代码。此代码在iOS上“丢失”。编译器本身可能有些不同,但这只是编译器中有代码的问题:如果(编译到GC)基本上,苹果是通过不同的编译和提供不同的运行时来实现的

在更哲学的层面上,这些真的是同一种语言吗?您可以争辩说,iOS的Objective-C与Mac的Objective-C语言不同。iOS上缺少垃圾收集,这使得语言的语义有了显著的不同。所以你可以把它看作两种不同的语言,它们看起来非常相似,但语义却有细微的不同


在实践层面上,自动参考计数(ARC)的引入缓解了语言之间的差异。这将使用引用计数自动执行内存管理。其结果是iOS的垃圾收集形式很弱。因此,语义上的差异更加微妙

我同意,我也喜欢自己控制内存管理