2012-01-21 79 views
5

我是iOS 5和ARC的新手,請原諒我的愚蠢問題。自動參考計數(ARC)對內存泄漏的影響

如果我們在項目中使用ARC,是否意味着不會有任何內存泄漏。

如果我們使用ARC,是否需要使用儀器檢測內存泄漏和NSZombies?

+0

不,ARC不會完全消除內存泄漏。參見[Objective-C的自動引用計數(在Xcode 4.2中)不會阻止/最小化是什麼樣的漏洞?](http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-objective-cs - xcode-4-2中的自動引用計數) – BoltClock

回答

5

ARC將幫助您消除某些類型的泄漏,因爲您不會忘記releaseautorelease單個對象。例如,這種類型的錯誤變得不可能:

myLabel.text = [[NSString alloc] initWithFormat:@"%d", 17]; 
// oops, just leaked that NSString! 

然而,ARC不會消除由保持週期泄漏。消除保留週期仍然取決於您,或者使用弱引用,或者在泄漏之前手動中斷循環。例如,當我們開始更多地使用塊時,塊/自我保留週期變得更加普遍。 Transitioning to ARC Release Notes討論如何使用弱引用來避免這些循環。

+1

如果您想了解ARC,我強烈建議您從[WWDC 2011](https://developer.apple.com/videos/wwdc/2011/)上的「介紹自動引用計數」視頻。 –

+0

我能做什麼這樣的問題的情況下http://stackoverflow.com/questions/21423309/memory-leak-in-nsstring-stringwithutf8string-with-arc-enabled – deltaaruna

0

不,這並不能防止內存泄漏的發生。運行時引用計數會發生什麼情況,有時您的代碼會留下懸而未決的引用,然後對象不會被釋放。編寫好的代碼仍然取決於你。

+0

好的。那麼同樣的事情也適用於NSZombies? – meetpd

0

如果我們在我們的項目中使用ARC,是否意味着不會有任何內存泄漏。

可能仍有泄漏 - 在您的程序和您使用的庫中。此外,ARC僅適用於ObjC對象 - 您可以輕鬆地泄漏任何不是objc對象的堆分配(例如,malloc/new)。

如果我們使用ARC,是否需要使用儀器檢測內存泄漏和NSZombies?

是的。以前的回覆應該詳細說明爲什麼你的程序不能保證沒有這些問題。另外,如果你做了愚蠢的事情,編譯器可能會錯誤,如果不能正確保護你的數據(例如併發執行),你肯定會導致問題。