但是如果在计算机上使用Objective-C,那不就是垃圾回收吗?
首先,就 ObjC 而言,垃圾收集是一项新功能,于 2007 年与 OS X 10.5 同时引入。其次,它是一个框架功能——也就是说,它是Cocoa的一部分——不是语言本身的一部分。它仍然可以在 OS X 上使用,但据我所知,Apple 并不打算再使用它。ARC 是新的系统提供的内存管理范例。
直到最近在 iPhone 和 iPad 上使用 Objective-C 才需要手动管理,这不是真的吗,因为 iOS 没有垃圾收集?过去怎么样,可能回到 90 年代,Objective-C 没有垃圾收集,或者它总是有垃圾收集但自从 iPhone 出来后,
不,从 NeXT 时代开始,直到引入 Cocoa 的垃圾收集,桌面上总是需要手动内存管理(就像在 C++ 或 C 中一样)。即使在 GC 可用之后,由于性能问题或需要在较旧的 OS 版本上运行,许多人还是更愿意坚持使用 MRR。
那么retain
andrelease
被添加到语言中了吗?
特定的方法retain
和release
以及它们启用的引用计数系统同样是框架的一部分,而不是语言,但由于 Cocoa 是使用 ObjC 的卓越框架(其他 ObjC 框架,如 GNUStep,模仿 Cocoa),它是编写 ObjC 时执行内存管理的主要方式。(当然,Cocoa 继承了NeXT 的retain
/release
系统。)
完全可以使用自己的内存管理方法/系统编写另一个根类。但是,这样做并尝试与 Cocoa 交互会有点疯狂,而且它根本无法用 ARC 编译。