使用ARC而不再关心手动内存mgmt

时间:2013-08-08 07:30:20

标签: objective-c automatic-ref-counting

当使用ARC时,这意味着我们可以忘记关于内存管理相关的任务吗?例如,像删除/释放我们分配的内存等。

我知道我们可能需要干涉的两个地方是保留周期,并且应该在类定义中的Outlet ivars之前使用__weak(如果这些出口不是XIB的对象层次结构中的顶层对象)。

还有什么我需要考虑的吗?

2 个答案:

答案 0 :(得分:2)

事情发生了变化。 你仍然应该坚持一些与内存管理/ ARC相关的模式。你不会再保留,释放,自动释放和释放。

新: 你仍然会覆盖dealloc方法,并且所有强引用都没有。这不是必需的,但可以做到。但你不会再打电话给[super dealloc]了。

根据您是否拥有所有权,您将声明属性强或弱。

如果你想以释放内存的方式摆脱一个对象,那么你必须将所有强引用都放在那个对象上。每个强引用对应一个保留。但你不能在这些对象上调用retain。

您不能再调用未声明的方法(如果没有ARC,则会生成编译器警告,使用ARC会出错。) 在使用变量selectos时会出现警告(即使用SEL类型的变量并在对象上执行这些变量),并且您永远不应该使用可能对保留计数具有implact的方法(例如alloc)。

当您与不使用ARC的框架区域(如核心功能)进行交互时,您仍有很多机会出错。

因此它远离“忘记”,但应用ARC模式比以前的MRC模式工作更少,更不容易出错。

答案 1 :(得分:-1)

使用ARC时,您不必使用dealloc / autorelease。所以,是的,你可以忘记删除发布等。 唯一要考虑的是强大的参考周期,就像你在这里提到的那样。 另一个例子是当你使用委托对象时。

您也可以参考apple's documentation