2009-10-12 67 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