首页 文章

ARC还是没有ARC iphone iOS5 [关闭]

提问于
浏览
7

我开发了一个iPhone应用程序,它应该支持基于iOS4和iOS5的iPhone / iPad .

我的应用程序在几个地方泄漏内存,由于代码的大小而变得难以调试 . 我最近读过ARC(自动引用计数),我的查询是

  • 我是否需要修改我的源代码(retain / release / alloc / dealloc)以使用ARC进行编译 . 还有我们需要使用ARC执行哪些更改?

  • 建议转向ARC吗?

  • 如果我使用ARC,我的应用程序将在iOS4手机上运行

谢谢 .

3 回答

  • 4

    这可能不是发布这个问题的最佳地点,但我会回答,因为我不介意这里的问题 .

    http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

    • 您将使用迁移工具“编辑>重构>转换为Objective-C ARC”并手动修复该工具无法弄清楚的任何内容 .

    • 是的 .

    • 是的但归零弱引用不会 .

  • 14

    我绝对认为程序员理解内存管理以及系统实际工作方式是有益的......但是,我认为ARC是一个非常好的系统并且工作得非常好 . 这真的是一个意见问题,所以我的意见是,除非在非常具体的情况下,几乎总是值得开始新的项目,这些项目将针对ARC上的iOS 5应用程序 .

    我觉得如果你在你的代码中使用了很多C库,那么现在使用ARC有点困难(所以如果你主要使用第三方C库和像CoreFoundation这样的东西,你可能会考虑是否是否有意义,但即便如此,如果这些库大部分与您的Objective-C控制器隔离,那么ARC仍然是好的 .

    对于较旧的应用,您需要查看应用使用情况和模式 . 如果你使用了很多委托方法,因为你不能在iOS 4上使用弱引用,它会变得有点棘手,你可能需要混合ARC和非ARC代码 . 做出设计决定以推进ARC可能会更好 . 所以新功能是针对iOS 5设计的,并且可能在iOS 4版本的应用程序中不可用(或完全可用),并且那些使用ARC .

    实际上,最终,它将取决于您的应用程序的设计方式,大小,以及您对托管内存管理和ARC的使用/限制的舒适程度 . 例如,我有三个项目,我永远不会转换为ARC,一个我现在正在混合的项目,一个完全转换(但仍然针对iOS 4)和2个完全基于ARC和iOS 5的项目 .

  • 1

    要明确的是,如果您的目标是iOS 4,则无法使用ARC弱引用,您仍然可以使用 unsafe_unretained ,这基本上相当于使用 assign 作为对象属性 . 这意味着您可以将任何编写良好的非ARC代码转换为ARC,而不会在iOS 4上意外创建保留周期 .

    通过使用 unsafe_unretained ,您将失去弱引用的自动空功能,但您仍然可以获得ARC的所有其他好处,例如不必担心忘记在dealloc语句中释放ivars等 .

相关问题