长期以来,我一直认为自己是一个垃圾收集势利小人——尽管对 C++ 有着秘密的热爱,但我发现自己在嘲笑那些积极选择使用没有(阅读:缺失)垃圾收集的语言的开发人员。
然后我遇到了Objective-C。哇!它的引用计数系统看起来非常简单——我什至可以说是优雅的。在为 OSX 开发时,开发人员可以选择使用时髦的 GC;在为 iOS 开发时,开发人员被引用计数困住了。
我的问题是:
如果我正在开发一个可能被移植到 iOS 的 OSX 应用程序,Objective-C 的引用计数系统是否足够耗时(开发方面和错误修复方面)以保证在应用程序的第一个版本中忽略它?
如果我依赖引用计数*,我可能会遇到什么问题,假设我不够聪明,无法构建任何极其复杂的循环数据结构?有了类似的功能autorelease
,这一切看起来都那么简单,但我知道如果真的是这样,Apple 就不会投入精力来创建垃圾收集器。我应该注意什么?
* 我知道我可以使用垃圾收集器,即使我扔掉retain
s 和release
s(它们会被忽略)。但是,考虑到非 GC 应用程序经常使用RAII,我不明白如果分代 GC 要“替换”对retain
and的调用,那将如何工作release
。资源不会延迟释放吗?