2013-10-23 38 views
-1

當你在一個方法內實例化一個對象時,當這個方法被調用的時候,對象將被分配內存,但是什麼對象將持有對這個對象的引用,或者當方法結束時它會被自動釋放。謝謝。當在Obj-C中的方法內創建對象時,對象的內存會發生什麼變化?

+0

我應該更具體:我指的是ARC,對象不是類的實例變量,只是在方法結束之前持有info,比如字符串的長度。所以這裏的簡單答案似乎是:「什麼時候超出範圍?」 – user2909415

回答

0

在OS X和iOS 5+中,Objective-C使用Automatic Reference Counting。在這種情況下,該對象在超出範圍時被釋放,就像您期望的那樣。

在此之前,您需要明確保留和釋放對象。 Here's a useful article from 2010 on this topic.

Objective-C的在保持計數模式(不使用垃圾收集)是 簡單的想法。當你明確地分配一個對象時,它得到一個保留 的計數爲1,當你在一個對象上調用release或autorelease時,它的值是 ,保留計數減1,然後收集對象。 這是iOS設備上唯一可用的模式,自操作系統開始以來已在 Mac OS X上使用。

0

簡短的回答,如果您使用ARC(自動保留計數)或者如果對象自動釋放,它將在適當時發送release消息。

如果您手動管理內存,你必須手動發送release方法時,他們被要麼newallocretaincopymutableCopy返回的對象,否則該對象會泄漏你會失去任何當堆棧被撕毀時引用它。

0

如果您的應用程序是ARC那麼它將在超出範圍後解除分配。如果對象是一個類的屬性,那麼它將通過不同的規則進行清理,具體取決於它是否被定義爲strongweak。強意味着只要擁有它的對象指向它,對象就不會被清理(只要擁有它的對象存在,那麼它就不會被清除)。弱意味着物體不會被清理,只要另一個物體指向它。

相關問題