Objective-C中的参考计数警告?

我一直认为自己是一个垃圾收集势利小人 - 尽管对C ++有着深深的爱好,我发现自己嘲笑开发人员,当他们给出选项时,他们会主动选择使用没有(读取:丢失)垃圾收集的语言。 然后我遇到了Objective-C。哇!它的引用计数系统看起来非常简单 - 我甚至可以说优雅。在为OSX开发时,开发人员可以选择使用时髦的GC;在为iOS开发时,开发人员仍然坚持使用引用计数。 我的问题是: 如果我正在开发一个可能被移植到iOS的OSX应用程序,那么Objective-C的引用计数系统是否足够耗时(开发方面和错误修复)以保证忽略应用程序的第一个版本? 如果我依赖引用计数*,我可能会遇到什么问题,假设我不够聪明地构建任何恶魔复杂的循环数据结构?有了像
autorelease
这样的功能,这一切看起来都很简单,但我知道,如果真的如此,Apple就不会投入精力去创建垃圾收集器。我应该注意什么? *我知道即使我扔掉
retain
s和
release
s(他们也会被忽略)我也可以使用垃圾收集器。但是,考虑到非GC应用程序经常使用RAII,我不明白如果代际GC要“替换”对
retain
release
的调用,这将如何工作。资源是否可能迟发?     
已邀请:
我开发代码以移植到iOS的经验是,仅使用GC代码并将其移植到引用计数是有点单调乏味且耗时并且可能容易出错。话虽如此,只要你尽可能地使用属性(尽管它们在GC中保持不变而保留它们)并且启用静态分析器构建阶段,它也不会太糟糕。静态分析器将捕获大多数故障以观察内存管理规则。它不会注意到你是否未能在dealloc中释放一个ivar,但你可以通过并系统地添加所有dealloc方法。 请记住,您不能直接将Mac应用程序移植到iPhone,MVC的VC部分必须完全重写,因此您可以采用编写Mac UI的方法仅用于垃圾收集,并且只使模型类兼容GC和引用计数。     

要回复问题请先登录注册