使用ARC的保留/释放有哪些情况

时间:2013-06-23 09:05:12

标签: ios automatic-ref-counting

创建了一个新的iOS项目后,我启用了ARC而不打算支持iOS< 5.0。这是否意味着我永远不需要使用retain/release或者有些情况可能需要使用它们?

有人可以列出这些案例,如果有的话,谢谢!

3 个答案:

答案 0 :(得分:4)

您应该阅读Apple的迁移指南。有一些警告。但是,您不必自己使用retain/release,除非您直接使用Core Foundation或者您使用-fno-objc-arc专门标记单个文件,并且自行为此释放内存仅限文件。

答案 1 :(得分:0)

您永远不需要使用retain / release / autorelease。启用ARC后,您将无需编写内存管理代码,除非您正在使用Core Foundation - ARC不关心Core Foundation对象。但是,您可以让ARC通过__bridge_transfer强制转换(或CFBridgingRelease)为您释放CF对象。如果你从Cocoa或Cocoa Touch功能或方法获得它,它在Objective-C-land中,因此由ARC管理。您可以使用__bridge_retained强制转换(或CFBridgingRetain)将其传输到CF世界,之后您必须CFRelease它(或将其传输回ARC)。是的,只要在没有ARC的情况下编译类(您可以逐个文件地控制它们;转到构建阶段并将-fno-objc-arc作为标志添加到任何应该在其他ARC中编译的文件中。 d project),然后编译的类可以覆盖retain / release / autorelease到他们内心的内容。

答案 2 :(得分:0)

No, you don't need to use them as ARC is enabled.

保留/释放是分别用于保留和释放对象引用的方法。它用于管理内存分配和释放。用户必须自己管理内存,仅当ARC未启用或不可用时,如下面的iOS 4.3。

ARC是Automatic Reference Counting。启用后,SDK本身会决定何时释放对象。用户只需要分配它。用户仍然可以管理no的分配。通过声明对象的strongweak引用来识别对象。