2011-04-08 63 views
2

我正在整理我的iPad應用程序中的一些內存分配問題,並花了很長時間看CFString成長和成長(作爲一個仍然活着的物體)在殭屍工具下,直到我切換到泄漏或分配工具,我發現它根本沒有多大增長(創建並且仍然活着始終保持穩定)任何人都可以解釋爲什麼會發生這種情況在殭屍,但不泄漏或分配儀器,它使我想知道如果CFString是一個問題,或只是殭屍拋出的假陽性....在Zombies儀器下運行時大型CFString分配,但不泄漏或分配儀器

+0

你是指所有的字符串還是隻是某個實例/字段? – 2011-04-08 13:19:17

+0

從應用程序中看似無處不在的CFStrings一般很多很多,這些都是生活分配不泄漏 – Matt 2011-04-08 15:15:53

回答

3

殭屍專門不釋放內存,以便您可以看到,如果你是訪問我在你釋放它之後。在使用殭屍時,不能嘗試檢測泄漏。

根據殭屍工具,你應該只是試圖檢測殭屍。應用程序的其他行爲不一定會相同。爲了最大限度地發現訪問殭屍的機會,可以使用非標準分配器。

+0

即時通訊不知道這是100%正確的,我可以看到其他分配上升和下降,以及生活對象的數量上升和下降,但CFString似乎螺旋失去控制,這是分配不泄漏我看着 – Matt 2011-04-08 15:17:00

+1

CFString使用自定義分配器 - 也許他們可以重用內存。如果是這樣,不釋放將導致更多的分配。另外,如果分配器可以共享用戶不知道的實例(引擎蓋下的引用計數) - 那麼必須關閉這個實例,否則您將無法檢測到濫用。我懷疑這是預期的行爲。 – 2011-04-08 16:54:32

+0

+1 @Matt您看到的許多分配可能都是通過NSString apis分配的。 NSString是CFString - 您可以追蹤最重的路徑或您關注的路徑(在樂器中)。這些(NSStrings)不會被釋放,並有意泄露Lou的說法。儀器可以記錄每個分配創建的調用堆棧以及每個參考計數操作。 – justin 2011-04-08 17:36:24