3

我已經看到了很多網站,在使用時,ARC你仍然需要廢止陣列和一些東西,但我認爲它是自動的......所以我有幾個問題:如何用ARC管理內存?

  • 我什麼時候不得不關心記憶,我該怎麼辦?例如,當我有一個2窗口的應用程序(主窗口+第二窗口),我打電話給第二個窗口並填充數組時,當它關閉返回到主窗口時,我必須把數組= = ?或者在窗戶關閉時自動完成ARC?

在此先感謝

+0

我相信ARC會自動完成它。如果沒有,那麼我有一些工作要做。 – Josiah

+0

我以爲是一樣的,現在我有一些隨機strdup內存泄漏.. :( –

+0

你不必在你的'dealloc'中設置實例變量爲零.. ARC將'dealloc'上自動釋放這些ivars – s1m0n

回答

1

ARC在Objective-c開發中有很大進步,但即使在使用ARC時,您也必須非常小心內存管理。

我建議你看WWDC 2011 video about ARC做一個很好的使用這個功能,因爲你需要看一些細節,真正不浪費設備的內存。

最重要的一點是,你可以得到最好的ARC,確保你沒有循環引用,比如一個控制器引用另一個控制器,並且都有強引用,當你認爲你銷燬了一個控制器時,其他人會保留它,然後你將沒有任何記憶。

另一個重要的一點是,您需要確保您告訴編譯器您不需要更多的對象,這就是爲什麼您需要將該數組設置爲零,因此編譯器只會添加命令來釋放數組,因爲ARC只是自動引用計數,並且由編譯器完成,而不是在運行時完成。現在您的編譯器會將發佈調用添加到您。

所以回答你兩點:

1 - 你總是需要關心的內存,因爲圓弧有一定的規則,必須服從,就像設置爲nil您不再使用的對象。

2 - 在您的示例中,您需要注意一些問題,首先您需要確保您沒有對第二個窗口的引用,並且還需要設置爲零,因爲Objective-c沒有垃圾回收器,所以引用計數不再是顯式的。

2

通過抵消你告訴ARC,你不再需要一個陣列,它是安全的iOS把它清理乾淨的數組。這也是一個很好的做法,因爲檢查nil對於許多形式的iOS編程非常重要。

是的,您可以允許ARC處理所有事情,但您也可以讓iOS在完成後立即清理內存。我還要補充一點,適當的零設置語句可以是一種很好的自我文檔形式。

+0

因此,儘管控制器即將關閉並重定向到另一個窗口,如果我手動取消數組,對嗎? –

+1

這取決於聲明數組的位置。如果它是第二個控制器的ivar,它將在控制器被釋放時自動釋放。如果它是全局變量或存儲在第一個控制器中,則需要手動使其無效。 – MrMage