2009-10-12 57 views

回答

5
之前

版本2.0 Objective-C中使用的战略reference counter跟踪和管理存储器。从2.0开始,垃圾收集器可以被激活,但是,在iPhone上尚未提供。

看一看关于Objective-C引用计数器策略的文章here

现在,2011年,似乎GC机制已被弃用,以支持自动引用计数(ARC)机制。

Apple

自动引用计数

自动引用计数(ARC)的Objective-C中,内存管理的编译器的工作。通过在新的Apple LLVM编译器中启用ARC,您将永远不需要再次输入retain或release,从而大大简化了开发过程,同时减少了崩溃和内存泄漏。编译器完全了解您的对象,并在每个对象立即不再使用时释放它们,因此应用程序可以以前所未有的速度运行,并具有可预测的平滑性能。

+0

你的意思是我们不能使用“object = [[class method] retain];”在iPhone – 2009-10-12 08:21:07

+0

不需要。您必须在iPhone上使用保留/释放。我可能写了一些混乱。保留/释放即将出台。有些喜欢它,有些则不喜欢。 – epatel 2009-10-12 10:19:45

+0

从Xcode 4.2开始,自动引用计数(ARC)将适用于iOS 4和5.基本上,您永远不需要在代码中再次写入保留/释放。 – 2011-09-05 21:12:21

2

假设“方法”是以下约定它将呼叫方(除非方法被调用的alloc,新的或复制)的范围期间被返回任一种autoreleased参考,或一些保证有效。因此,如果没有保留,引用在直接调用上下文中应该是有效的,但如果您想在实例变量中保留它,则需要保留。

因此,如果您只是在通话的紧接着的上下文中使用“对象”,则不需要保留 - 否则您会这样做。

如果你要做保留计数,你很熟悉这个语义是非常重要的。网上有许多适合的参考文献,但我会重复the one epatel has already given, which is another stackoverflow question